1700454895
把父类的前置条件修改为Map类型,我们再修改一下子类方法的输入参数,相对父类缩小输入参数的类型范围,也就是缩小前置条件,源代码如代码清单2-16所示。
1700454896
1700454897
代码清单2-16 子类的前置条件较小
1700454898
1700454899
public class Son extends Father{
1700454900
1700454901
//缩小输入参数范围
1700454902
1700454903
public Collection doSomething(HashMap map){
1700454904
1700454905
System.out.println(“HashMap转Collection被执行……”);
1700454906
1700454907
return map.values();
1700454908
1700454909
}
1700454910
1700454911
}
1700454912
1700454913
在父类的前置条件大于子类的前置条件的情况下,业务场景的源代码如代码清单2-17所示。
1700454914
1700454915
代码清单2-17 子类的前置条件较小
1700454916
1700454917
public class Client{
1700454918
1700454919
public static void invoker(){
1700454920
1700454921
//有父类的地方就有子类
1700454922
1700454923
Father f=new Father();
1700454924
1700454925
HashMap map=new HashMap();
1700454926
1700454927
f.doSomething(map);
1700454928
1700454929
}
1700454930
1700454931
public static void main(String[]args){
1700454932
1700454933
invoker();
1700454934
1700454935
}
1700454936
1700454937
}
1700454938
1700454939
代码运行结果如下所示:
1700454940
1700454941
父类被执行……
1700454942
1700454943
那我们再把里氏替换原则引入进来会有什么问题?有父类的地方子类就可以使用,好,我们把这个Client类修改一下,源代码如代码清单2-18所示。
1700454944
[
上一页 ]
[ :1.700454895e+09 ]
[
下一页 ]