第八章 多态

一、向上造型

  (1)方法调用的绑定

    将一个方法调用同一个方法主体关联起来被称作绑定。

    如在程序执行前进行绑定(如果有的话,由编译器和连接程序实现),叫做前期绑定(编译器绑定)。这个是针对面向过程的,默认绑定方式(多态中的方法调用的迷惑的原因,是因为在前期绑定,当编译器只有一个父类型引用的时候,它无法知道究竟调用哪一个方法)

    解决方案:后期绑定(运行时绑定),就是在运行时根据对象的类型进行绑定。Java中除了Static方法和final方法之外,其他所有的方法都是运行时绑定。

  (2)可扩展性

     在一个设计良好的OOP程序中,大多数父子类会遵循向上造型,只与父类接口通信。这样的程序是可扩展的,因为可以从通用的父类继承出新的数据类型,从而添加一些新的功能。

缺陷:

  (3)父类的私有方法没有多态性质,应为private方法隐式final,不能重写,而且对子类是透明的,子类定义的相同方法,是一个只属于子类自己的一个新方法。

  (4)域(相当于有两份一样的域)和静态方法不具备多态的特性,静态资源是属于类的,所有的调用,看的都是变量类型。

二、构造器和多态

  构造器实际上是static方法,static是隐式的,所以不具备多态

  (1)构造器的调用顺序

    父类的构造函数总是在子类构造函数执行之前被调用。因为构造函数具有一项特殊任务:检查对象是否被正确构造。在子类中,如果没有明确指出调用那个父类构造,会默默调用默认构造函数。如果不存在默认的构造函数,编译器就会报错(如果没有构造函数,会默认合成一个默认的构造函数)

     1、调用父类构造函数

     2、按照生命顺序调用成员的初始化方法(先初始化静态资源、在初始化非静态资源)

     3、调用自己的构造函数

三、继承于清理

  通过组合和继承方法来创建新类时,永远不必担心对象的清理问题,子对象通常都会留给垃圾回收器进行处理。

  在构造函数中唯一能够安全调用的那些方法是父类中的final方法

  父类调用被子类覆盖的方法,实际调用的是子类的方法

四、协变返回类型

  Java SE5 中添加了协变返回类型,它表示在子类中的被覆盖方法可以返回父类方法的返回类型的某些子类型(方法返回类型的向上造型

五、使用继承进行设计

  组合是首选,尤其是不确定应该使用哪种方式时。

六、向下转型(ClassCastException)

  运行时期对类型检查的行为称作“运行时类型识别”RTTI

 

posted @ 2017-11-06 15:54  js王  阅读(154)  评论(0编辑  收藏  举报