金华城乡建设网站,门户网站是什么意思啊,江苏城市建设职业学院网站,net网站开发框架本文仅作学习笔记与交流#xff0c;不作任何商业用途#xff0c;作者能力有限#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识#xff0c;看不懂没关系 请看专栏#xff1a;http://t.csdnimg.cn/mIitr#xff0c;尤其是关于继承的两篇文章#xff… 本文仅作学习笔记与交流不作任何商业用途作者能力有限如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识看不懂没关系 请看专栏http://t.csdnimg.cn/mIitr尤其是关于继承的两篇文章本知识点与其密切相关 1.里氏替换原则(LSP)
里氏替换原则Liskov Substitution PrincipleLSP是面向对象编程中的一个重要设计原则它由芭芭拉·利斯科夫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了一个子类的对象出来还能正常用这就是里氏替换 3.优点