面向复用的软件构造技术
1.设计可复用的类
(1).子类型多态与LSP原则
子类型多态
客户端可用统一的方式处理 不同类型的对象
在可以使用父类对象的场景,都可以用子类对象代替而不会有任何问题
静态检查规则:
子类型可以增加方法,但不可删
子类型需要实现抽象类型中的所有未实现方法
子类型中重写的方法必须有相同或子类型的返回值
子类型中重写的方法必须使用同样类型的参数
子类型中重写的方法不能抛出额外的异常
对于特定方法:
更强的不变量;更弱的前置条件;更强的后置条件
LSP原则
协变
父类型→子类型:返回值类型/异常的类型不变或变得更具体
逆变
父类型→子类型:参数类型不变或越来越抽象
数组是协变的:类型为T的数组可以包含类型为T的元素或T子类的元素
泛型不是协变的:类型擦除
ArrayList<String>是List<String> 的子类
List<String>不是List<Object> 的子类
类型参数的通配符:List<?>
表示下界的通配符:<? super A> 与所有A的父类型匹配
表示上界的通配符:<? extends A> 与所有A的子类匹配
//TO BE CONTINUED