软件构造期末复习3.4
interface和Class:定义和实现ADT;
接口之间可以继承和扩展,接口不能实例化;
一个类可以实现多个接口(从而具备了多个接口中的方法);
一个接口可以有多种实现类
接口:确定ADT规约;
类:实现ADT;
也可以不需要接口,直接使用类作为ADT,既有ADT定义也有ADT实现;
实际中更倾向于用接口定义变量
Set senate = new HashSet<>();
继承(override):
子类可以继承父类,并对父类中的方法进行一定的修改(重写)
严格继承:父类中所有的方法在子类中都存在
抽象类:类中至少有一个抽象方法(只有声明,没有具体实现)
多态(overload):
- 特殊多态:功能重载,让多个方法共用一个方法名,但有不同的参数列表或返回值类型。是一种静态多态:根据参数类型进行选择。静态类型检查就是在编译阶段对对象类型的检查。
- 参数化多态:(泛型)根据不同的需要赋予不同的值
- 子类型多态、包含多态:可以用接口或父类型声明变量
Overloading(重载):参数不一样,其他可一样可不一样。
Overriding(重写):参数一样,返回值一样。子类抛出的异常需要比父类的少,子类需要有比父类更强的实现。子类的规约要比父类的规约强。
正方形不能作为长方形的子类
equals()方法用来判断两个对象是不是相等的;
hashCode()方法可以把每一个对象转化成哈希数值;
等价性equals()和==:
equals() 对象等价性:对于对象类型使用此方法
== 引用等价性:对于基本数据类型使用此方法。使用==是在判断两个对象身份标识ID是否相等(指内存里的同一段空间)
equals()方法:
大部分情况下需要对Object类中实现的equals()方法进行重写。
等价关系:自反、传递、对称;
除非对象被修改了,否则调用多次equals应同样的结果;
“相等”的对象,其hashCode()的结果必须一致;
不相等的对象也可以映射为同样的hashCode,但性能会变差
用“是否为等价关系”检验equals()是否正确;