重写前奏~继承和多态

简介: 上次说到的重载是指同一类中方法和方法之间的关系,这次向大家介绍的重写是子不同类中方法和方法的关系;在介绍重写之前,要先说说继承和多态;

上次说到的重载是指同一类中方法和方法之间的关系,这次向大家介绍的重写是子不同类中方法和方法的关系;在介绍重写之前,要先说说继承和多态;


继承


对象的继承代表了“is -a ”的关系,A和B可以描述成B是A,就可以称为B可以继承A,不能相互颠倒。继承者是被继承者的特殊化。在继承中,子类是派生类,父类是基类。子类不但继承父类的所有特征,还可以定义新的特征。


1、子类拥有父类非private的属性和性能,也就是说,父类中protected修饰的类成员,对子类公开,但对其他类不公开;


2、子类具有自己的属性和和功能,即子类可以扩展父类没有的属性和功能;


3、子类还可以以自己的方式实现父类的功能(方法重写);


继承的优点是:

使得所有子类公共的部分都放到了父类,使得代码得到了共享,避免了重复。


继承的缺点是:

父类变,子类不得不变。


猴子和动物的关系是继承


具体代码:


20160215162505576.jpg


多态


继承是多态的基础,没有继承多态无意。继承是为了复用,而多态是为了在复用时解决耦合问题。下面我用不是活生生的例子给大家从概念处讲解一下。(打扰Michael Joseph Jackson老先生了)


  多态:不同的对象可以执行相同的动作,但是通过她们自己的实现代码来执行。杰克逊把自己的衣服分别给自己的三个歌迷,三个歌迷穿着这件衣服里唱歌,执行唱歌的动作,虽然是用自己的方法唱,唱出来的声音不一样。


注意:

1、子类以父类的身份出现(歌迷以杰克逊的身份出现);

2、子类在工作时以自己的方法来实现(歌迷在唱歌时有自己的唱法);

3、子类以父类的身份出现时,子类特有的属性和方法不可使用(歌迷在唱时不要暴露出中文和自己的真实身份,不要说中国话)

   为使子类的实例完全来自父类的类成员父类,父类必须将成员声明为虚拟的。(通过在该成员的返回类型之前添加Virtual关键字来实现。)

多态中为什么要虚拟呢?什么地方需要虚拟呢?

  把歌迷与歌迷之间真正不同的地方在杰克逊类里虚拟起来,比如歌迷的唱法,歌迷唱的动作。至于杰克逊的衣服,都是一样的,穿法不变,就不必虚拟,哪个歌迷都能穿,歌迷可以直接拿过来用。用到虚拟的,就是不能直接拿过来用的,真正有区别的,要经过掩饰一下的。比如 想把中文“杰克逊”改 为“ Michael Joseph Jackson  ”,只需要该一个地方就可以了。当然,这是在继承的基础上用到的多态。如果都不承认自己是杰克逊的歌迷,那就没必要穿他的衣服了,更别说再参加这次唱歌的活动了;

   具体代码,见下一节:重写




















相关文章
|
7月前
|
存储 C++ 容器
第十四章:C++虚函数、继承和多态详解
第十四章:C++虚函数、继承和多态详解
65 0
|
9天前
|
存储 安全 编译器
封装、继承与多态究极详解
本文详细介绍了面向对象编程中的三大核心特性:封装、继承和多态。封装通过隐藏数据和提供接口,确保对象的安全性和一致性;继承通过类之间的“is-a”关系实现代码复用和扩展;多态则允许不同类的对象通过相同的接口执行不同的操作,增强程序的灵活性和可扩展性。文章还探讨了这些特性的底层实现机制,如虚函数表和内存布局,并提供了具体的代码示例。
23 0
|
3月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
3月前
|
存储 C#
C# 一分钟浅谈:继承与多态性的实践
【9月更文挑战第2天】本文从基础入手,详细介绍了面向对象编程中继承与多态性的核心概念。通过 `Animal`、`Dog` 和 `Cat` 类的示例代码,展示了如何利用继承重用代码及多态性实现不同对象对同一方法的多样化响应,帮助读者更好地理解和应用这两个重要概念,提升面向对象编程能力。
48 3
|
5月前
|
Java 编译器
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
|
7月前
|
Java 编译器
【JAVA面向对象编程】--- 探索子类如何继承父类
【JAVA面向对象编程】--- 探索子类如何继承父类
42 0
|
设计模式
26【软件基础】简单计算器的实现+工厂方法模式应用+封装、继承、多态的体现
工厂方法模式是一种常用的`创建型设计模式`,它提供了一种将对象的创建过程封装起来的方法。在工厂方法模式中,将对象的创建过程交给一个`工厂类`来完成,而不是在代码中直接调用构造函数来创建对象。这样可以使得代码更加灵活,`降低耦合度`,方便后期维护和扩展。
169 0
|
Java
Java面向对象继承
继承的概念 继承是面向对象编程中的一个概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。子类在继承父类的同时也可以添加自己的属性和方法,从而实现代码的复用和扩展。继承是面向对象编程的三大特征之一,其他两个分别是封装和多态。 继承的作用 1.提高代码的复用性:通过继承,子类可以直接使用父类的属性和方法,不需要重复定义。 2.便于代码的扩展:通过在子类中添加新的属性和方法,实现了代码的扩展。 3.提高代码的可维护性:将公共的属性和方法放在父类中,可以减少重复的代码,从而方便代码维护和升级。
76 0
|
Java
【Java面向对象】继承的认识与实现(1)
【Java面向对象】继承的认识与实现(1)
89 0
|
Java
Java面向对象 继承
Java面向对象 继承
86 0