继承

在设计继承时,你会把共同的程序代码放在某个类中,然后告诉其他的类说此类是他们的父类。当某个类继承另一个类的时候,也就是子类继承自己的父类。
以Java的方式来说,这是子类继承父类。继承的关系意味着子类继承了父类的方法。当我们提及类的成员变量的时候,成员的意思就是实例变量和方法。
举例来说,如果Iron Man是SuperHero的子类,那么Iron Man会自动的继承SuperHero的实例变量和方法,包括了suit、tights、specialPower、usespecialPower()等等。但Iron Man可以加入自己的方法和实例变量(比如,有钱、自负),也可以覆盖掉来自父类的SuperHero的方法。
Java编程基础知识——了解继承
Black Widow不需要任何的独特的能力(只是举例…)或者行为,所以她没有覆盖任何的方法。然而Iron Man的超能力需要特别的处理方法,所以就覆盖掉了对应的两种方法。
实例变量无法被覆盖是因为不需要,它们并没有定义特殊的行为。Iron Man可以把继承下来的tights设定成红色,而黑寡妇自行选择黑色。

调用哪个方法?
看图:
Java编程基础知识——了解继承
狼是犬科的子类,犬科是动物的子类。
那么上述调用分别是调用哪个方法呢?
当你调用对象引用的方法时候,你会调用到与该对象类型最接近的方法。换句话说,最低阶的会调用!
“最低阶”的意思是指层次数的最下方。Canine比Animal低,wolf比Animal低,因此Java虚拟机会从Wolf开始找起。如果Java虚拟机找不到wolf版本的方法,它会往上找,一直找到为止。
Java编程基础知识——了解继承
既然你说Java虚拟机会从继承关系树形图最下方开始搜索方法,要是没有找到的时候会发生什么事情?
你不用担心这个问题。编译器会保证引用特定的方法是一定能够被调用到的,但在执行的过程中它不会在乎该方法是从哪个类中找到的。比如上面这个例子,编译器会检查sleep()方法,但是不会管sleep()实际上是定义在Animal这个类中,要记得如果某个类继承了一个方法,它就会有哪个方法。方法在哪里对于编译器来说不重要,但在执行期间,虚拟机总会找到正确的。这个正确的是指:最接近该类型的版本。

逻辑上判断继承使用的是否正确:

IS-A X的测试
如果存在继承,那么肯定适用于这种逻辑判断。子类IS-A父类:
wolf是一个犬科
wolf是一个动物

注意!
继承类型下的IS-A X的测试是单向的!

如果子类想调用父类的方法,怎么办?

如果在子类中还打算父类的方法然后再加上额外的行为应该怎么办?
你可以在父类中设计出所有子类都适用的功能实现,让子类可以不用完成覆盖掉父类的功能,只是再加上额外的行为,你一颗通过super这个关键词来取用父类
Java编程基础知识——了解继承

父类可以允许子类可以继承哪些东西么?

目前我们会讨论四种存取权限。
private<default<protected<public
存取权限(access level)控制了谁可以接触什么,这对编写程序具有非常大的意义。

  1. public类型的成员会被继承;
  2. private类型的成员不会被继承;

当子类把成员继承下来的时候会把它们当做是自己定义的一样。

以上知识点的总结:

  1. 子类是extends父类出来的;
  2. 子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有的private类型的变量和方法;
  3. 继承下来的方法可以被覆盖掉,实例变量不能被覆盖掉;
  4. 使用IS-A X测试来判断继承是否合理;
  5. 当某个方法在子类中被覆盖过,调用这个方法时会调用到覆盖过的版本。

那么继承到底有什么意义?

通过设计继承的过程,你可以积累面向对象的经验值。通过提取出一组类之间的共同点,你能够排除掉重复的程序代码而将这个部分放在父类中。如此一来,如果有共同部分需要修改的地方,就只会有一个地方需要修改而已,且这样的改变会应用到所有继承此行为的类。修改以后只需要重新编译就行,不必修改子类。
换上改变过的父类,则所有扩充过它的类都会自动使用到新的版本。
Java程序只是由一堆类组成的。因此,子类不需要重新编译就能运用到新版本的父类。如果父类不会被破坏的情况下。

相关文章:

  • 2021-12-05
  • 2021-05-28
  • 2021-12-05
  • 2021-08-17
  • 2021-12-05
  • 2021-12-05
  • 2021-09-23
  • 2021-09-25
猜你喜欢
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2021-06-15
  • 2021-06-27
  • 2022-02-22
  • 2021-06-24
相关资源
相似解决方案