#软件构造 LSP里氏原则与软件设计

这一篇主要对 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进行处理,非常感谢!

上一篇 2020年5月22日
下一篇 2020年5月22日

相关推荐