java继承中容易混淆的点

在java中提到继承,首先想到的是爹和儿子,俗话说得好“长江后浪推前浪,一浪更比一浪强,儿子把爹拍在沙滩上”,正所谓一代比一代强,儿子继承爹的光荣传统,延续了家族的香火,练就了一身特殊的本领,赋予了他爹的光环后又将其延续下去,开辟了属于自己的时代。

在java中提到继承,首先想到的是爹和儿子,俗话说得好“长江后浪推前浪,一浪更比一浪强,儿子把爹拍在沙滩上”,正所谓一代比一代强,儿子继承爹的光荣传统,延续了家族的香火,练就了一身特殊的本领,赋予了他爹的光环后又将其延续下去,开辟了属于自己的时代。

this & super

看这俩单词儿也很好理解,this意思为“这个”,“当前”,super意思为“超级”,隐身含义为,this 当前类,super,超类也可称父类。

this的作用

  • 引用隐式参数,如 调用当前类的方法、调用当前类的属性
  • 调用该类的其他构造器

super的作用

  • 调用超类方法
  • 调用超类构造器

注意: 这两个关键字在使用时,调用构造方法时必须在构造方法的第一行出现。

多态

一个对象变量可以接受多种实际类型的现象称为多态。通俗点说,父类引用只想子类对象即是多态的一种表现。

多态时,父类引用调用方法的具体执行看子类,子类如果重写了父类原有的方法a(int) ,则父类引用在调用a(int)时将执行子类的方法。

不能将一个父类的对象挂在子类的引用上。举个例子,公司有很多职员,普通职员和经理都属于职员,可以说经理是职员,表示形式为is – a,但反过来,职员是经理那就荒谬了,并不是所有职员都是经理。

动态绑定 & 静态绑定

何为静态绑定? 即运行时调用的方法不依赖于隐式参数的实际类型,即调用private、static和final方法,该调用过程的方法选择现象为静态绑定。

何为动态绑定?即运行时能够自动选择调用哪个方法,不依赖于隐式参数的实际类型的现象称为动态绑定。

a为类A对象的引用,a.function(param)的调用解析过程如下:

  1. 虚拟机获取引用变量a的实际类型的方法表,具体得看多态中实际对象是谁。
  2. 搜寻function方法的签名,此处假设function方法的签名为function(int),则虚拟机会首先在当前类中找寻方法名为function 参数列表为int的签名方法,找到后,及确定了调用方法。否则,搜寻其父类,以此类推。
  3. 调用方法,执行。

动态绑定一个非常关键的特性在于,不必对原有代码进行修改。如上a.function(),现在有类A派生一个类B,扩展类类A的function(int),只需要将父类的引用指向B类的实际对象

方法覆盖的注意事项

方法覆盖时,子类的方法不能低于父类方法的可见性。即 如果父类方法为public,子类方法必须为public,否则将报错