浏览 1222 次
锁定老帖子 主题:里氏代换原则(LSP)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-08-02
为什么称它是里氏代换原则?顾名思义啦,这个原则是里氏提出来的啦,其全名为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”,那么,你的设计不满足里氏代换原则,同时,它也不会满足“开闭原则”,这为你以后的扩展与维护会带来很多的麻烦,下面是不满足里氏代换原则的典型的例子: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |