代码共享,减少创建类的工作量,每个子类都拥有父类的属性和方法;
提高代码的重用性;子类可以形似父类,但又异于父类;提高代码的
可扩展性;提高产品或项目的开放性。有优点就必然存在缺点:
继承是侵入性的。只要继承,就必须拥有父类的属性和方法。降低代
码的灵活性。子类会多一些父类的约束。增强了耦合性。当父类的常
量、变量、方法被修改时,需要考虑子类的修改。为了让“利”的因素发挥
最大的作用,同时减少“弊”带来的麻烦,引入了里氏替换原则(LSP)。
历史替换原则最正宗的定义是:如果对每一个类型为 S 的对象 o1,都有类型为
T 的对象 o2,使得以 T 定义的所有程序 P 在所有的对象 o1 都代替 o2 时,程序
P 的行为没有发生变化,那么类型 S 是类型 T 的子类型。
通俗点讲,就是只要父类能出现的地方,子类就可以出现,而且替换为子类也
不会产生任何错误或异常。
里氏替换原则为良好的继承定义了一个规范,一句简单的定义包含了 4 层含义。
1. 子类必须完全实现父类的方法。
我们在做系统设计的时候,经常会定义一个接口或抽象类,然后编码实现,调
用类则直接传入接口或抽象类,其实这里就已经使用了里氏替换原则。我们以
打 CS 举例,来描述一下里面用到的枪。类图如下:
评论0
最新资源