里氏替换原则的英文名称是Liskov Substitution Principle,简称:LSP;
定义 : 只要父类出现的地方子类就一定可以出现,而且替换为子类也不会出现任何异常或错误,使用者不需要知道是父类还是子类.但是返回来就不行了,有子类出现的地方,
使用规范 :
1. 子类必须完全实现父类的方法,如果子类无法完全实现父类的方法,则建议断开父子继承关系,采用依赖 | 聚集 | 组合 等关系来代替
2. 子类可以有自己的个性
3. 覆盖或实现父类的方法时,输入参数可以被放大,比如父类中有一个方法的输入参数是 HashMap,子类的参数可以是 Map 类型,这样父类就可以被子类替换,如果反过来,则违背了里氏替换原则,所以子类中方法的前置条件必须与父类的
被覆写的方法的前置条件相同或者更宽松
4. 覆写或实现父类的方法时,输出结果可以被缩小,也就是说如果父类方法返回的类型 T,子类的相同方法(重载或覆写)的返回值类型 S,S 和 T 要么同类型,要么 S 是 T 的子类;跟上面的道理一样
他的优点:
代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性;
提高代码的重用性;
子类可以形似父类,但又异于父类;
提高代码的可扩展性,实现父类就可以为所欲为;
提高产品或项目的开放性;
既然有优点,那缺点肯定是有的,
缺点是:
继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法。
降低代码的灵活性。子类必须拥有父类的属性和方法,让子类有了约束性;
增强了耦合性。
网友评论