ToB企服应用市场:ToB评测及商务社交产业平台
标题:
里氏替换原则
[打印本页]
作者:
三尺非寒
时间:
2023-9-2 06:25
标题:
里氏替换原则
里氏替换原则
OOP(Object Oriented Programming) 面向对象编程
OO中的继承性的思考
1.继承包含这样一层含义,父类中凡是已经写好的方法,实际上就是设定规范。虽然不强制要求所有子类必须遵守规范(不重写方法),但是如果子类对这些方法,任意修改就会对继承体系造成破坏。
2.继承在程序设计带来便利同时,也带来弊端。使用继承会给程序带来侵入性,程序的可移植性降低,增加了对象间的耦合,如果一个类被其他类继承,则当这个类需要修改时,必须考虑所有的子类,并且父类修改后,所有涉及到的子类的功能可能会受到影响。
3.问题提出,编码中如何正确的使用继承? =>
里氏替换原则
基本介绍
1.里氏替换原则(Liskov Substitution Principle)在1988年,由麻省理工学院的里姓女士提出的。
2.如果对每个类T1对象t1,都有类型T2的对象t2,使得以T1定义的所有对象t1替换为t2时,程序的行为不会方式改变,那么T2类是T1的子类。换句话说,所有引用基类的地方,必须能透明的使用其子类的对象。
3.在使用继承时,遵循里氏替换原则,
在子类中尽量不要重写父类中写好的方法。
4.里氏替换原则,说明继承让两个类的耦合性增强了,
在合适的情况下,可以使用组合,聚合,依赖传递解决问题。
案例1
案例只是为了体现原则的设计,并无实际意义
/**
* @author 长名06
* @version 1.0
* 里氏替换原则 案例1
* 分析
* 因为B类继承了A类,且不小心,重写了A类的fun1方法,导致
* 原有的父类的方法的功能,被破坏,违反了里氏替换原则
* 所以,在需要重写父类的方法的类关系中,可以将继承关系替换成依赖(组合,聚合)关系
*/
public class Liskov1 {
public static void main(String[] args) {
A a = new A();
System.out.println("2-4=" + a.fun1(2, 4));
System.out.println("5-4=" + a.fun1(5, 4));
B b = new B();
System.out.println("2-4=" + b.fun1(2,4));//要求出2-4
System.out.println("4-5=" + b.fun1(4,5));//要求出4-5
System.out.println("4-5 + 9=" + b.fun2(4,5));//要求出4-5 + 9
}
}
class A {
public int fun1(int a, int b) {
return a - b;
}
}
class B extends A {
@Override
public int fun1(int a, int b) {
return a + b;
}
public int fun2(int a, int b) {
return fun1(a, b) + 9;
}
}
复制代码
案例2
/**
* @author 长名06
* @version 1.0
* 使用组合方式 替代继承方式
*/
public class Liskov2 {
public static void main(String[] args) {
A a = new A();
System.out.println("2-4=" + a.fun1(2, 4));
System.out.println("5-4=" + a.fun1(5, 4));
B b = new B();
System.out.println("2-4=" + b.fun3(2,4));
System.out.println("4-5=" + b.fun3(4,5));
System.out.println("4+ 5 + 9=" + b.fun2(4,5));
}
}
class Base{
}
class A extends Base {
public int fun1(int a, int b) {
return a - b;
}
}
class B extends Base {
private A base = new A();
public int fun1(int a, int b) {
return a + b;
}
public int fun2(int a, int b) {
return fun1(a, b) + 9;
}
public int fun3(int a,int b){
return base.fun1(a,b);
}
}
复制代码
只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4