里氏代换原则(LSP)

为什么称它是里氏代换原则?顾名思义啦,这个原则是里氏提出来的啦,其全名为Barbara Liskov,一个很牛的人,有兴趣的可以查一下其简历;

里氏代换原则的描述:

如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有改变,那么类型T2是类型T1的子类型;

换言之,父类出现的地方,子类一定就可以出现!java语言是支持里氏代换原则的,从里氏代换原则上,我们就很容易理解一个问题,就是父类和子类中方法访问权限的问题;

如果父类声明了一个public的方法method,子类override这个方法的时候,能否把访问权限降低到private呢?从里氏代换原则上考虑,是不行的。也就是说,子类在override父类的方法时,访问权限不能变窄,否则,就不支持里氏代换原则了。

里氏代换原则是类型的行为的一种抽象或者称为描述,我们经常会提到继承关系是“IS-A”的关系,其实,是指在行为上“IS-A”,也就是”ACT-AS”,如果你使用继承涉及的东西,在行为上不能“ACT-AS”,那么,你的设计不满足里氏代换原则,同时,它也不会满足“开闭原则”,这为你以后的扩展与维护会带来很多的麻烦,下面是不满足里氏代换原则的典型的例子:

本文来自:http://plabmedia.com/pd/168110/

猜你喜欢

转载自songkewei110.iteye.com/blog/1617783