本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正
本系列作为七大原则和设计模式的进阶知识,看不懂没关系请看专栏:http://t.csdnimg.cn/mIitr,尤其是关于继承的两篇文章,本知识点与其密切相关
1.里氏替换原则(LSP)
里氏替换原则(Liskov Substitution Principle,LSP)是面向对象编程中的一个重要设计原则,它由芭芭拉·利斯科夫(Barbara Liskov)在1987年提出,这个原则的核心思想是:子类对象可以替换父类对象,而不会影响程序的正确性
说白了,就是子类可以当父类用,只要涉及到继承的类就都可以用里氏替换原则
2.举栗子
继承下的里氏替换
子类必须完全实现父类的方法,说到完全实现,是不是就联想到了抽象类?故以此为例
我有一个抽象父类Computer,有两个抽象方法,子类去要去实现
Computer noteBook = new NoteBook();
noteBook.SayName();
noteBook.OutName();
public abstract class Computer
{
protected Computer() { }
//抽象方法
public abstract void SayName();
public abstract void OutName();
}
public class NoteBook : Computer {
//1.子类必须完全实现父类的方法
public override void OutName() {
Console.WriteLine("5800x");
}
public override void SayName() {
Console.WriteLine("5800x");
}
//2.子类可以有自己特有的方法
public void SayMyName() {
Console.WriteLine("笔记本");
}
//3.父类的行为在子类中仍然有效,下面这部分方法会抛出异常,所以违反了父对象的行为,视为无效
//public override void SayName() {
// throw new NotImplementedException();
//}
}
Q:这和继承不是没有区别吗?
A:其实,因为子类可以完全继承父类的这一特点,所以几乎看不出来区别
But!!!!!!!!!!!!!!!!!!!!注意这一行代码:
我用父类的类new了一个子类的对象出来,还能正常用,这就是里氏替换