六大原则之里氏替换原则

里氏替换原则(LSP)

子类应当可以替换父类并出现在父类能够出现的地方。简单来说就是继承

解决问题:当类在继承的时候,如果一旦子类的方法出现变更则继承的类也可能出现问题。

如何解决:

  1. 子类可以实现父类的方法,但是不要覆盖(重写)父类的方法。
  2. 子类可以增加自定义的方法(可以拓展方法)
  3. 如果一定要做这种事,通过残数控制,子类可以定义更多的参数(方法的重载),方法名一样,但参数类型,个数不一样。

优点:
可以大大的减少程序的bug和增加程序的可读性。

例子:
不遵循里氏替换原则的样子:

package LSP;

public class A {
	int fun1(int a, int b)
	{
		return a+b;
	}

}
package LSP;

public class B extends A {
	int fun1(int a,int b)
	{
		return a-b;
	}
	
	int fun2(int a, int b)
	{
		return fun1(a,b)+100;
	}

}
package LSP;

public class Client2 {
	public static void main(String args[])
	{
		B b = new B();
		System.out.println("1+2 = "+ b.fun1(1, 2));
		System.out.println("1+2+100 = " + b.fun2(1, 2));
		System.out.println("1-2 = "+ b.fun1(1, 2));
	}

}

不遵循里氏替换原则的后结果:

1+2 = -1
1+2+100 = 99
1-2 = -1

遵循里氏替换原则:

package LSP;

public class A {
	int fun1(int a, int b)
	{
		return a+b;
	}

}
package LSP;

public class B extends A {
	int fun3(int a,int b)
	{
		return a-b;
	}
	
	int fun2(int a, int b)
	{
		return fun1(a,b)+100;
	}

}
package LSP;

public class Client2 {
	public static void main(String args[])
	{
		B b = new B();
		System.out.println("1+2 = "+ b.fun1(1, 2));
		System.out.println("1+2+100 = " + b.fun2(1, 2));
		System.out.println("1-2 = "+ b.fun3(1, 2));
	}

}

遵循里氏替换原则结果:

1+2 = 3
1+2+100 = 103
1-2 = -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值