设计原则:里氏替换原则
在面向对象的语言中,继承是必不可少的、非常优秀的语言机制。采用里氏替换原则的目的就是增强程序的健壮性,版本升级时也可以保持非常好的兼容性。即使增加子类,原有的子类还可以继续运行。在实际项目中,每个子类对应不同的业务逻辑,使用父类做参数,传递不同的子类完成不同的业务逻辑。
它有优点如下:
1.代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性。
2.提高代码的重用性。
3.子类可以形似父类,”龙生龙,凤生凤,老鼠生来会打洞“是说子拥有父的”种,”这世界上没有两片相同的叶子“是指明子类与父类的不同。
4.提高代码的扩展性,实现父类的方法就可以“为所欲为”了,君不见很多开源框架的扩展接口都是通过继承父类来完成的。
提高产品或项目的开放性。
2.提高代码的重用性。
3.子类可以形似父类,”龙生龙,凤生凤,老鼠生来会打洞“是说子拥有父的”种,”这世界上没有两片相同的叶子“是指明子类与父类的不同。
4.提高代码的扩展性,实现父类的方法就可以“为所欲为”了,君不见很多开源框架的扩展接口都是通过继承父类来完成的。
提高产品或项目的开放性。
自然界的所有事物都是优点和缺点并存,即使是鸡蛋,有时候也能挑出骨头。
它的缺点如下:
1.继承是侵入性的。只要继承,就必须拥有父类的所有属性和方法。
2.降低代码的灵活性。子类必须拥有父类的属性和方法,让子类多了些约束。
3.增强了耦合性,当父类的常量、变量和方法被修改时,必需要考虑子类的修改,而且在缺乏规范的环境下,这种修改可能带来非常糟糕的结果,一大片代码需要重构。
里氏替换原则为了良好的继承定义了4条规则:
1.子类必须完全实现父类的方法。
2.子类可以有自己的个性。但项目中,尽量避免子类的个性,一旦子类有个性,这个子类和父类之间的关系很难调和,把子类当父类使用,子类的个性没有发挥,把子类单独作为一个业务来使用,则会让代码间的耦合关系变得扑朔迷离,缺乏类替换的标准。
3.覆盖或实现父类的方法时输入参数可以被放大。通常都是扩展父类的功能,不改变原来的功能。
4.覆写或实现父类的方法时输出的结果可以被缩小。
2.子类可以有自己的个性。但项目中,尽量避免子类的个性,一旦子类有个性,这个子类和父类之间的关系很难调和,把子类当父类使用,子类的个性没有发挥,把子类单独作为一个业务来使用,则会让代码间的耦合关系变得扑朔迷离,缺乏类替换的标准。
3.覆盖或实现父类的方法时输入参数可以被放大。通常都是扩展父类的功能,不改变原来的功能。
4.覆写或实现父类的方法时输出的结果可以被缩小。
父类:
public class Father {
public void doSomthing(HashMap Map){
System.out.println("father doSomthing");
}
}
子类:
public class Son extends Father{
public void doSomthing(Map map){
System.out.println("son doSomthing");
}
}
client类:
public class Client {
public static void main(String[] args) {
Father father=new Father();
father.doSomthing(new HashMap());
Son son=new Son();
Map map=new HashMap();
son.doSomthing(map);
}
}
执行结果:
father doSomthing
son doSomthing
本文固定链接:http://www.yizhi227.com/?post=46
本文由Jessie原创或编辑,互联分享,尊重版权,转载请以链接形式标明本文地址
本文由Jessie原创或编辑,互联分享,尊重版权,转载请以链接形式标明本文地址