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

    使用继承设计

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

  • 相关阅读:
    MySQL中文显示乱码
    mysql 存储引擎 InnoDB 与 MyISAM 的区别和选择
    mysql 分表的3种方法
    mysql 清空或删除表数据后,控制表自增列值的方法
    MySQL 下优化SQL语句的一些经验
    mysql 常用命令
    MySQL获得指定数据表中auto_increment自增id值的方法及实例
    SQL Server Alwayson创建代理作业注意事项
    LinkedList子类与Queue接口
    List接口
  • 原文地址:https://www.cnblogs.com/huangwenjie/p/11375708.html
Copyright © 2011-2022 走看看