1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| "使用里式替换原则" public class Liskov { public static void main(String[] args) { B b = new B(); "因为B类不再继承A类,因此调用者,不会再func1是求减法" "调用完成的功能就会很明确" System.out.println("11+3=" + b.func1(11, 3));"这里本意是求出11+3" System.out.println("11+3+9=" + b.func2(11, 3)); "使用组合仍然可以使用到A类相关方法" System.out.println("11-3=" + b.func3(11, 3));"这里本意是求出11-3" } }
"创建一个更加基础的基类" class Base { "把更加基础的方法和成员写到Base类" }
"A类" class A extends Base { "返回两个数的差" public int func1(int num1, int num2) { return num1 - num2; } }
"B类继承了A" "增加了一个新功能:完成两个数相加,然后和9求和" class B extends Base { "如果B需要使用A类的方法,使用组合关系" private A a = new A(); "这里,重写了A类的方法, 可能是无意识" public int func1(int a, int b) { return a + b; }
public int func2(int a, int b) { return func1(a, b) + 9; } "我们仍然想使用A的方法" public int func3(int a, int b) { return this.a.func1(a, b); } }
|