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 中引入了协变返回类型,这表示派生类的被覆写方法可以返回基类方法返回类型的派生类型。

    使用继承设计

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

  • 相关阅读:
    js -- use strict
    css布局—— 固定+自适应
    web前端安全问题(转载)
    清除float浮动
    源码核心动画01-CALayer-基本使用(了解)
    源码0308-画板
    源码0306-手势解锁
    源码0301-图片水印-裁剪-截屏-截取-擦除
    源码0309-雪花(定时器)-图形上下文状态栈-矩阵操作
    源码0308-模仿UIImageView
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11375708.html
Copyright © 2011-2022 走看看