Thinking in Java Study(07)

    技术2022-05-11  90

    多态

    面向对象的程序设计语言的特征,抽象、继承、多态。

    多态分离“做什么”和“怎么做”,将接口与实现分离。作用:不但能够改善代码的组织结构和可读性,还能够创建“可扩展的”程序。(动态邦定,后期邦定,运行时邦定)

    1.  向上转型

    前面的章节已经介绍,继承自基类的子类可以自动转化为基类的对象,可以接受所有发送给基类的消息。

    2.  忘记对象类型

    在编写方法时可以完全忘记对象的类型,而采用基类的类型作为参数。其会自动的认出传入的是什么类型的对象,从而调用相应的方法。

    3.  方法调用绑定

    方法绑定就是将一个方法调用和一个方法主体关联起来。

    若在程序执行前进行邦定叫做前期绑定,C语言的编译器采用这种方法

    在运行时根据对象的类型进行绑定叫做后期绑定,Java除了staticfinal方法外其他方法都是后期绑定。

    4.  产生正确的行为

    Shape的例子,编译器能做出正确的判断知道应该调用那个类型的方法。

    5.  Private方法的重载

    只有非private方法才可以被重载,在导出中虽然可以写一个和基类的private方法同名的方法,但其并不是基类方法的重载而是子类一个全新的方法。

    6.  抽象类和抽象方法

    使用abstract关键字修饰,包含抽象方法的类必为抽象类,导出类必须实现抽象的方法。抽象类不能产生对象。

    7.  构造器和多态

    构造器的初始化顺序,递归的调用基类的构造器,然后按声明顺序初始化导出类的成员,然后是导出类的构造器。

    8.  继承与清除

    与初始化的顺序刚好相反。清除时子类的dispose方法要显式的调用基类的dispose方法,super.dispose()

    9.  构造器内部的多态行为

    构造器初始化的顺序,第一先将所有分配给对象的初始化空间置为二进制的零。构造器中调用方法可能会访问没有完全初始化的对象。

    “用尽可能简单的方法是对象进入正常状态;如果可以的话,避免调用其它方法”在构造器内部唯一能够安全调用的方法是基类中的final方法。

    10.              用继承进行设计

    当我们使用现成类来建立新类时,首先选择“组合”,尤其是当你自己不能十分确定应该使用哪一种方式时。组合更加灵活,因为它可以动态选择类型,相反,继承在编译期间就需要知道确切的类型。

    “用继承表达行为间的差异,用属性表达状态上的变化”继承重载方法

    11.              向下转型

    RTTI类型检测,会自动检测能否向下转型,如果不能抛出ClassCastException异常

     

    最新回复(0)