这一篇主要对 4.2节面向复用性的软件设计进行总结
里氏替代原则1:行为子类型
首先,LSP全称为里氏(Liskov )替代原则——Liskov Substitution Principle ,是面向对象最重要的几大原则之一。
从字面上去指,其含义是:
- 子类型可以增加方法,但不可删
- 子类型需要实现抽象类型中的所有未实现方法
- 子类型中重写(Override)的方法 必须有相同或子类型的返回值
- 子类型中重写(Override)的 方法必须使用同样类型或者父类型的参数
- 子类型中重写(Override)的方法不能抛出额外的异常
很显然上面的原则已经写进了Java的语法规则里,如果不满足无法通关静态类型检查
除此之外,还需要遵守一些原则,虽然编译器不会强制我们遵守,但是如果想要写出复用性高的代码要做到:
- 子类型拥有相同或更强的不变量
- 子类型拥有相同或更弱的前置条件
- 子类型拥有相同或更强的后置条件
简答说就是子类型需要有至少不弱于父类型的不变量,同时规约也需要更强
比如下面的例子:
例如:
因为我们不能认为List是 List的子类型
比如这一段代码中 编译器提示我们 sum(List) 对于参数 (List) 不适用
那么,对于MyClass 和 MyClass 类, 无论A和B有什么样的关系,MyClass 和 MyClass 类都没有类型之间的关系,他们的共同父类只是Object类。
因此,因为类型擦除的缘故,泛型是类型不变的,而非协变或者逆变的。
2. 一些特殊的泛型类型
通配符 ( wildcard character ), 例如 List
而 List是 List 文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览93759 人正在系统学习中 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!