zoukankan      html  css  js  c++  java
  • 20190819 On Java8 第九章 多态

    第九章 多态

    向上转型回溯

    可扩展性

    由于多态机制,在一个设计良好的面向对象程序中,许多方法,只与基类接口通信。这样的程序是可扩展的,因为可以从通用的基类派生出新的数据类型,从而添加新的功能。那些操纵基类接口的方法不需要改动就可以应用于新类。

    陷阱:”覆写“私有方法

    只有非 private 方法才能被覆写,但是得小心覆写 private 方法的现象,编译器不报错,但不会按我们所预期的执行。为了清晰起见,派生类中的方法名采用与基类中 private 方法名不同的命名。

    陷阱:属性与静态方法

    只有普通的方法调用可以是多态的。

    如果一个方法是静态(static)的,它的行为就不具有多态性。静态的方法只与类关联,与单个的对象无关。

    构造器和多态

    构造器不具有多态性(它们实际上是静态方法,但是隐式声明的)。

    构造器调用顺序

    对象的构造器调用顺序:

    1. 基类构造器被调用。这个步骤重复递归,直到根基类的构造器被调用,然后是它的派生类,以此类推,直到最底层的派生类构造器被调用。
    2. 按声明顺序初始化成员。
    3. 最终调用派生类的构造器。

    构造器内部多态方法的行为

    初始化的实际过程是:

    1. 在所有事发生前,分配给对象的存储空间会被初始化为二进制 0。
    2. 如前所述调用基类构造器。
    3. 按声明顺序初始化成员。
    4. 最终调用派生类的构造器。

    编写构造器有一条良好规范:做尽量少的事让对象进入良好状态。如果有可能的话,尽量不要调用类中的任何方法。在构造器中唯一能安全调用的只有基类的 final 方法(包括 private 方法,它们自动属于 final)。

    协变返回类型

    Java 5 中引入了协变返回类型,这表示派生类的被覆写方法可以返回基类方法返回类型的派生类型。

    使用继承设计

    有一条通用准则:使用继承表达行为的差异,使用属性表达状态的变化。在上个例子中,两者都用到了。

  • 相关阅读:
    opencv7-ml之KNN
    opencv7-ml之统计模型
    计算机视觉-sift(2)代码理解
    计算机视觉-sift(1)原理
    PRML2-概率分布
    如何高效的通过BP算法来训练CNN
    CPP2-基础部分(1)
    PRML5-神经网络(2)
    《机器学习系统设计》(2)
    《机器学习系统设计》(1)
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11375708.html
Copyright © 2011-2022 走看看