面向对象设计原则详解:里氏替换原则
来源:互联网 发布:淘宝宝贝的无线端链接 编辑:程序博客网 时间:2024/06/05 14:29
定义:子类型必须能替换掉他们的基本类型。只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类。但是,反过来就不行了,有子类出现的地方,父类未必就能适应。
继承无非就是,完全按照父类的方法实现和除了父类的方法再加以扩展新的方法两种类型。那么子类要能替换父类,如何替换,不是说不能扩展新方法,相反,继承就是鼓励子类要扩展新的方法,要不然就违背了继承的意义。只是子类继承父类必须要严格遵守父类的规则。如果子类完全不关心父类制定的规则,就不符合调用者调用父类的本意。不遵循规则,就不能称之为继承。前面讲过开放封闭原则,就是类可以扩展,但是不可修改。那么里氏替换原则正是以这个为基础的。因此继承必须考虑以下几点。
1、抽象父类很关键。
不是随便写一个类,就能作为父类用的。必须考虑子类能替换它。比如写一个哺乳动物类。
继承无非就是,完全按照父类的方法实现和除了父类的方法再加以扩展新的方法两种类型。那么子类要能替换父类,如何替换,不是说不能扩展新方法,相反,继承就是鼓励子类要扩展新的方法,要不然就违背了继承的意义。只是子类继承父类必须要严格遵守父类的规则。如果子类完全不关心父类制定的规则,就不符合调用者调用父类的本意。不遵循规则,就不能称之为继承。前面讲过开放封闭原则,就是类可以扩展,但是不可修改。那么里氏替换原则正是以这个为基础的。因此继承必须考虑以下几点。
1、抽象父类很关键。
不是随便写一个类,就能作为父类用的。必须考虑子类能替换它。比如写一个哺乳动物类。
public abstract class Mammal { public abstract void Viviparous();//胎生 public abstract void ByFoot();//用脚行走 }
将这个类作为父类放在工程中,每增加一个具体动物类,就新建一个类继承Mammal,看着貌似是符合了开放封闭原则,可是当你增加蝙蝠类和鲸类,ByFoot()方法就有问题了,一个是飞的,一个是游的。怎么办?在父类增加一个方法吗?这明显违背了开放封闭原则。
有了这个教训,现在再考率抽象Mammal类,
public abstract class Mammal { public abstract void Viviparous();//胎生 }
只有这一个行为。行走那个方法呢,那么新增具体动物类时,在具体类里自己定义符合自己要求的方法。这样一来,无论你增加什么哺乳动物,这个父类都能满足。凡是用到Mammal类的地方,其子类都能代替它。
2、父类的方法都要在子类中实现。
这就不用说了,如果子类没有完全实现父类方法,替换父类也就没什么意义了。
3、子类可以有自己的属性和方法。
这是体现继承的优势的地方,可以扩展父类。因为按照上述要求抽象的父类,必然是只有公共的本质的属性和行为。试想千万种现实的对象,即使按界门纲目科属种分,某一细类的公共部分也是很少的。所以有很多特有的属性和行为都需要子类自定义来丰富自己。
- 面向对象设计原则详解:里氏替换原则
- 面向对象设计原则详解:里氏替换原则
- [设计模式]面向对象设计原则之里氏替换原则
- 面向对象设计原则--里氏替换原则(LSP)
- 面向对象设计原则二:里氏替换原则
- 面向对象设计原则之三:里氏替换原则
- 面向对象的设计原则:里氏替换原则
- 里氏替换原则详解--七大面向对象设计原则(2)
- 面向对象原则之里氏替换原则
- 面向对象设计原则---里氏代换原则
- 面向对象六大原则----里氏替换原则,依赖倒置原则
- 面向对象设计原则--里氏替换原则(LSP)和依赖倒置原则(DIP)
- 设计原则-里氏替换原则
- 设计原则-里氏替换原则
- 面向对象程序设计的六大原则(3)- 里氏替换原则
- 面向对象六大原则(三):里氏替换原则
- 面向对象的六大原则(三)-- 里氏替换原则
- 面向对象程序设计六大原则-里氏替换原则
- 例4线程的同步
- 如何看懂源代码
- Ubuntu下 git 服务器的搭建。
- android源码解析—-camera 照相机 摄像机
- js获取iframe框架中src所指向的文件的內容 .
- 面向对象设计原则详解:里氏替换原则
- Singleton 单件模式
- 在自己强大之前,不要奢望别人主动帮助你
- 默认网关
- 使用自定义标签简单案例
- 使用Putty登录Ubuntu后得到"Server refused our key"错误的一种解决方法
- 做别人的情人也很困苦无奈
- If I have been able to see further, it was only because I stood on the shoulders of giants.
- Android的Camera架构介绍之一