ToB企服应用市场:ToB评测及商务社交产业平台

标题: 里氏替换原则 [打印本页]

作者: 三尺非寒    时间: 2023-9-2 06:25
标题: 里氏替换原则
里氏替换原则

OOP(Object Oriented Programming) 面向对象编程
OO中的继承性的思考

基本介绍

案例1

案例只是为了体现原则的设计,并无实际意义
  1. /**
  2. * @author 长名06
  3. * @version 1.0
  4. * 里氏替换原则 案例1
  5. * 分析
  6. *  因为B类继承了A类,且不小心,重写了A类的fun1方法,导致
  7. *  原有的父类的方法的功能,被破坏,违反了里氏替换原则
  8. *  所以,在需要重写父类的方法的类关系中,可以将继承关系替换成依赖(组合,聚合)关系
  9. */
  10. public class Liskov1 {
  11.     public static void main(String[] args) {
  12.         A a = new A();
  13.         System.out.println("2-4=" + a.fun1(2, 4));
  14.         System.out.println("5-4=" + a.fun1(5, 4));
  15.         B b = new B();
  16.         System.out.println("2-4=" + b.fun1(2,4));//要求出2-4
  17.         System.out.println("4-5=" + b.fun1(4,5));//要求出4-5
  18.         System.out.println("4-5 + 9=" + b.fun2(4,5));//要求出4-5 + 9
  19.     }
  20. }
  21. class A {
  22.     public int fun1(int a, int b) {
  23.         return a - b;
  24.     }
  25. }
  26. class B extends A {
  27.     @Override
  28.     public int fun1(int a, int b) {
  29.         return a + b;
  30.     }
  31.     public int fun2(int a, int b) {
  32.         return fun1(a, b) + 9;
  33.     }
  34. }
复制代码
案例2
  1. /**
  2. * @author 长名06
  3. * @version 1.0
  4. * 使用组合方式 替代继承方式
  5. */
  6. public class Liskov2 {
  7.     public static void main(String[] args) {
  8.         A a = new A();
  9.         System.out.println("2-4=" + a.fun1(2, 4));
  10.         System.out.println("5-4=" + a.fun1(5, 4));
  11.         B b = new B();
  12.         System.out.println("2-4=" + b.fun3(2,4));
  13.         System.out.println("4-5=" + b.fun3(4,5));
  14.         System.out.println("4+ 5 + 9=" + b.fun2(4,5));
  15.     }
  16. }
  17. class Base{
  18. }
  19. class A extends Base {
  20.     public int fun1(int a, int b) {
  21.         return a - b;
  22.     }
  23. }
  24. class B extends Base {
  25.     private A base = new A();
  26.     public int fun1(int a, int b) {
  27.         return a + b;
  28.     }
  29.     public int fun2(int a, int b) {
  30.         return fun1(a, b) + 9;
  31.     }
  32.     public int fun3(int a,int b){
  33.         return base.fun1(a,b);
  34.     }
  35. }
复制代码
只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4