封装通过合并特征和行为来创建新的数据类型。 实现隐藏则通过将细节私有化,把接口和实现分离开来。 多态的作用是消除类型之间的耦合。
8.1 再论向上转型
8.1.1 忘记对象类型
将接口引用当参数传递
8.2 转机
8.2.1 方法调用绑定
将一个方法调用同一个方法主题关联起来被称作绑定。
前期绑定:若在程序执行前进行绑定,叫做前期绑定。 后期绑定:在运行时根据对象的类型进行绑定。也叫动态绑定或者运行时绑定。 java中除了static方法和final方法,其他都是动态绑定。
8.2.2 产生正确的行为
8.2.3 可扩展性
只有非private方法才可以被覆盖,对于导出类中,对与基类中的private方法,最好采用不同的名字。
8.2.4 缺陷:覆盖私有方法
private 方法被自动认为是final方法,而且对导出类是屏蔽的。
8.2.5 缺陷:域与静态方法
静态方法是与类、而非与单个的对象相关联的。
8.3 构造器和多态
构造器不同于其他种类的方法。涉及到多态时仍然是如此,尽管构造器并不是有多态性(他们实际上是static方法,隐式的)
8.3.1 构造器的调用顺序
父类的构造器总是在导出类的构造过程中被调用,保证每个父类的构造器都能够被调用。 调用构造器的顺序:
- 调用父类构造器
- 按照声明顺序调用成员的初始化方法。
- 调用子类构造器的主题。
8.3.2 继承与清理
销毁的顺序和创建的顺序是相反的。
8.4 协变返回类型
8.5 用继承进行设计
更好的方式是首先选择“组合”。组合更加灵活
8.5 总结
多态意味着 不同的形式。在面向对象的设计中,我们持有从基类继承而来的相同接口,以及使用该接口的不同形式不同版本的多态绑定方法。 运用数据的抽象和继承,能更好的类型和创造多态的例子。