《Thinkinginjava》第8章-多态

多态通过分离做什么怎么做,从另一角度将接口和实现分离开来,多态的作用是消除类型之间的耦合关系。多态也成为动态绑定后期绑定运行时绑定

8.1 后期绑定

假如有下面这样一个交通工具类

public class Transport {

    public static void move(Transport transport){
        transport.move();
    }
}

以上代码中的move方法接收一个Transport引用,在我们实际使用子类时,编译器怎样才能知道这个transport引用指向的是汽车还是轮船呢,实际上编译器无法得知,所以无法知道应该调用哪个方法才对,怎么办呢?后期绑定解决了这个问题。

后期绑定就是在运行时根据对象的类型进行绑定,后期绑定也叫动态绑定或运行时绑定。

java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定,意味着我们不必判定是否应该进行后期绑定——它会自动发生。

将某个方法声明为final,除了可以防止方法被覆盖之外,更重要的一点就是还可以有效地“关闭”动态绑定,或者说告诉编译器不需要对其进行动态绑定,这样,编译器就可以对final方法调用生成更有效的代码,但是这样做对程序的整体性能不会有什么改观,所以最好根据设计来决定是否使用final,而不是出于试图提高性能的目的来使用final。

在继承中,父类为继承自它的所有子类建立了一个公共接口,子类通过覆盖这些接口使每个子类拥有各自的行为。

静态方法是与类而不是与单个对象相关联的,所以它们不具有多态性。

8.2 构造器和多态

8.2.1 构造器的调用顺序

父类的构造器总是在子类的构造过程中被调用,顺序按照继承层次向上链接,使得每个父类的构造器都能得到调用。这种机制是因为构造器具有一项特殊任务:检查对象是否被正确地构造

构造器调用的顺序是这样的:

  1. 调用基类构造器,此步骤是反复递归的
  2. 按声明顺序调用成员的初始化方法
  3. 调用子类构造器的主体
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值