oop面向对象编程
重载overload、重写overwrite(override)
- 重载得到重名、参数列表不同的方法
- 重写是子类对父类函数的重写,函数签名完全相同
- 子类也能对父类方法重载
多态
三种多态:特殊多态、参数化多态、子类型多态
- 特殊多态:
源于重载,得到函数名相同,参数列表不同的函数,客户端调用时根据参数列表可以决定调用哪一个。
- 参数化多态:
源于泛型,思想上使用泛型参数代替具体的类型。(hit-Lab2,用泛型代替String)
作为一个泛型接口便于复用,具体实现时泛型参数被替换为具体类型
-
子类型多态:
方便客户端统一处理不同类型的对象而无需区分。
遵循LSP设计原则,子类对象取代父类对象
等价性
- 引用等价性==
比较地址是否相同
- 对象等价性equals()
根据重写的内容比较,通常是比较部分成员变量
等价关系的标准:自反、传递、对称,用以衡量重写的equals()的质量
对于不可变类型,需要重写equals()方法(与hashcode方法)
对于可变类型,不需要重写equals()方法,但要注意观察等价性、行为等价性
-
观察等价性:
状态不变,两个对象看起来是否一致。包括observer方法
-
行为等价性:
调用对象的任何方法都展示出一致的结果。包括mutator、producer、observer方法