thinking in java学习记录(八)多态

(多态也被称为动态绑定,运行时绑定)

8.1 再论向上转型

8.1.1 忘记对象类型

8.2 转机

8.2.1 方法调用绑定
将一个方法调用和同一个方法主体关联起来被称为绑定
后期绑定:在运行时根据对象的类型进行绑定
java中除了static方法和final方法(private方法属于final方法)之外,其他所有方法都是后期绑定的

8.2.2 产生正确的行为

8.2.3 可扩展性

8.2.4 缺陷:“覆盖”私有方法
只有非private方法才能够被覆盖(private方法属于final方法)

8.2.5 缺陷:域与静态方法
只有普通方法的调用可以是多态的,如果直接访问一个域,这个访问就将在编译器进行解析,因此域不是多态的,要显示的用super等。且若一个方法是静态的,它的行为就不具有多态性(静态方法是与类而非单个的对象相关联的)

8.3 构造器和多态

8.3.1 构造器的调用顺序
复杂对象调用构造器为下列顺序:
1.调用基类构造器
2.按声明顺位调用成员的初始化方法
3.调用导出类构造器的主体
因为当进行继承时,我们已经知道基类的一切,并且可以访问基类中任何声明为public和protected的成员。这意味着在导出类中,必须假定基类的所有成员都是有效的

8.3.2 继承与清理
销毁的顺序与初始化的顺序相反

8.3.3 构造器内部的多态方法的行为
static成员优于主方法被访问
编写构造器有一条很有效的准则:“用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其他方法。”在构造器里唯一安全的是调用final方法

8.4 协变返回类型
它表示在导出类中的被覆盖的方法可以返回基类方法的返回类型的某种导出类型

8.5 用继承进行设计
首先选择是组合:通用的准则就是:“用继承表达行为间的差异,并用字段表达状态间的差异”

8.5.1 纯继承与扩展
纯继承:不会有新方法,也就是说基类可以接受发送给导出类的任何信息
如何使基类也能访问子类的方法:加上强制转型符号即可

8.5.2向下转型与运行时类型识别
(加括弧的操作会在运行时收到检测)

发布了28 篇原创文章 · 获赞 1 · 访问量 646

猜你喜欢

转载自blog.csdn.net/c630843901/article/details/102558551