在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。
1.再论向上转型
- 多态作用:消除类型之间的耦合关系.
2.转机
- 绑定:将一个方法调用同一个方法主体关联起来.
- 前期绑定:在程序执行前就进行绑定(面向过程语言默认绑定方式).
- 后期绑定:也叫动态绑定或运行时绑定,在运行时根据对象的类型进行绑定.
- Java中除了static方法和final方法(private方法属于final方法)之外,其他所有的方法都是后期绑定.
- 只有普通的方法调用可以是多态的(任何域访问操作都将由编译器解析,因此不是多态的).
- 如果某个方法是静态的,它的行为就不具有多态性(静态方法是与类,而非与单个的对象相关联的).
3.构造器和多态
- 构造器并不具有多态性(隐式声明的static方法).
- 构造器的调用顺序:1.调用基类构造器,反复递归;2.按声明顺序调用成员的初始化方法;3.调用导出类构造器 的主体.
- 构造器的调用顺序是很重要的.再构造器内部,必须确保所要使用的成员都已经构建完毕.
- 通过组合和继承方法来创建新类时,永远不必担心对象的清理问题,子对象通常都会留给垃圾回收器进行处理.
- 对象销毁的顺序应该和初始化顺序(声明顺序,初始化时按照声明顺序进行的)相反.
- 对于基类,应该首先对其导出类进行清理,然后才是基类.
- 成员对象中存在于其他一个或多个对象共享的情况,需要使用"引用计数"来跟踪仍旧访问者共享的对象数量.
- 初始化的实际过程:1.在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的零;2.调用基类构造器;3.按照声明的顺序调用成员的初始化方法;4.调用导出类的构造器主体.
- 准则:用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其它方法.
- 在构造器内部唯一能够安全调用的方法是基类中的final方法(也适用于private方法),因为这些方法不能被覆盖.
4.协变返回类型
- Java SE5中添加了协变返回类型,它表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型.
5.用继承进行设计
- 不能在运行期间决定继承不同的对象,因为它要求在便宜期间完全确定下来.
- 准则:用继承表达行为间的差异,并用字段表达状态上的变化.
- 纯继承:"is-a",扩展:"is-like-a".
- 扩展缺点:导出类中接口的扩展部分不能被基类访问,因此,一旦使用向上转型,就不能调用那些新方法.
- 向下转型(cast):在继承层次中向下移动,能够获取类型信息.
- Java中所有转型都会得到检查.
END
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。