Java数据类型
静态类型检查范围:与类型相关,比如语法错误
动态类型检查范围:与值相关,比如非法的返回值
Final关键字对不可变引用提供了静态支持
在snapshot图中,不可变引用使用双箭头
正确的迭代删除方式
ADT操作的四种磊类型:
表示独立性(RI):
客户端实现ADT是无需考虑内部如何实现,ADT内部的变化不应该影响外部spec和客户端
除非ADT的操作指明了前置和后置条件,否则不能改变ADT的内部表示
不变量RI(rep invariant)
ADT中无论如何都成立的部分与与客户端的任何行为无关
抽象函数(AF)必须是满射
ADT的注释应该包括RI,AF,safe from rep exposure
OOP的独特特性
封装和信息隐藏
继承和覆盖
多态性、子类型和重载
静态和动态调度
成分和代表团
类型隐藏
抽象类:
重写和覆盖
子类可以重写父类中的方法,当父类方法是final时只能继承不能重写。子类可以调用super来使用父类中被重写的方法,调用父类的构造方法必须构造方法的第一行。
final类型的 field不可reassignment
final method 不可被overriding
final的class不可被extend
多态
一个函数可以有多个重名的实现
一个类型的名字可以代表多个类型
一个变量名字可以代表多个类的实例
重载
重载是在一个类中存在多个同名函数,
规则:
泛型
多态
一个函数可以 有多个同名的实现(方法重载)
一个类型名字可 以代表多个类型(泛型编程)
一个变量名字可以代表多个类的实例(子类型)
动态分配
动态分配其实就是在执行代码时,决定在多态中要执行哪个方法。主要分为编译阶段和执行阶段。在编译阶段在相对应的类中,寻找参数最匹配的方法。在执行阶段找到接受类,之后在类中找到对应方法。
重写equals方法需要具有自反,传递,对称性
重写hashcode方法: 17 和 31法则
可变换对象的观察等价性和行为等价性