本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正
本系列作为七大原则和设计模式的进阶知识,看不懂没关系请看专栏: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了一个子类的对象出来,还能正常用,这就是里氏替换