里氏代换原则等

《Java与模式》读书笔记。

里氏代换原则

里氏代换原则(LSP)简言之就是基类的属性方法一定是适应于子类的,反之则不然。

在编译期,Java编译器就会检查程序是否是符合里氏代换原则,不符合就不能通过。违反里氏代换原则的一个例子就是子类试图将基类中的public方法覆盖为private方法,是编译不过的,子类中接口的使用范围只能更广。

Java编译器检查程序是否是符合里氏代换原则是有限的,实现层次和逻辑层次是无法判断的。

Java API中也有违反里氏代换原则的例子,Properties继承自Hashtable。Properties假设key和value都是String型的,而Hashtable中的key和value都是Object型的,适用于Hashtable不一定就适用于Properties。

Properties ps = new Properties();

ps.setProperty("123", "111");

ps.put("123", 111);    //从Hashtable中继承
      System.out.println(ps.getProperty("123"));   //返回结果null

对于违反里氏代换原则可以做如下的处理。

里氏代换原则等,布布扣,bubuko.com

时间: 2024-10-11 19:26:04

里氏代换原则等的相关文章

设计原则之里氏代换原则

设计原则之里氏代换原则 substitute  = replace 替换 sub 下 st石头 i我  tu土 te特别 我用石头替换下土,造了特比坚固的房子 hierarchy  ['harɑk] = level 等级 hi海豹  er儿子  ar are是  ch成龙 海豹儿子的雷霆战机等级是比成龙高 derive [di'raiv]  起源,派生 de德国  rive river河 德国的莱茵河起源于阿尔卑斯山 动机:         当我们创建类的层级(继承),我们继承一些类,创建一些派

里氏代换原则

若对于每一个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型. What is wanted here is something like the following substitution property: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined

设计模式中的里氏代换原则

设计模式中的里氏代换原则 Table of Contents 1 里氏代换原则 2 模式中的里氏代换原则 2.1 策略模代 2.2 合成模式 2.3 代理模式 3 如何继承 3.1 不要从具体类继承 3.2 避免错误继承 1 里氏代换原则 从开-闭原则中可以看出来面向对象的重要原则是创建抽象化,并从抽象化导出具体化.具 体化可以给出不同的版本,每一版本都给出不同的实现.里氏代换原则从另一个侧面描述 抽象化和具体化,里氏代换原则表明:一个软件如果使用的是一个基类的话,那么一定适 用于其子类,而且它

面向对象设计原则之里氏代换原则

http://blog.csdn.net/lovelion/article/details/7540445 里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象. 在使用里氏代换原则时需要注意如下几个问题: (1)子类的所有方法必须在父类中声明,或子类必须实现父类中声明的所有方法.根据里氏代换原则,为了保证系统的扩展性,在程序中通常使用父类来进行定义,如果一个方法只存

模式-“里氏代换原则”

里氏代换原则是指拥有相同基类的两个子类,在使用子类A的地方(方法/属性)可以用子类 B来代替.对于面向接口编程,我只需要保证代码的行为不变;基类所有的方法子类必须全部 实现,换过来,子类的方法基类不一定都有; 假设:有一个基类Base;其子类是Concrete;那么method(Base b)的调用可以转换成 method(Concrete c); 策略模式:一般,我们把解决某个问题的方法称为一个"算法",而把解决一类问题的算法封装 成一个接口,那么实现算法的多种方式作为子类;在某个时

设计模式之里氏代换原则(LSP)

里氏代换原则(Liskov Substitution Principle, LSP) 1 什么是里氏代换原则 里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章<Data Abstraction and Hierarchy>里面提出来的,主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中的蕴涵的原理.2002年,我们前面单一职责原则中提到的软件工程大师Robert C. Martin,

西游记之设计模式原则——里氏代换原则

里氏代换原则 --子类能替换父类 1 package lishidaihuan; 2 3 class TangSeng { 4 public void QuJing() { 5 System.out.println("施主,贫僧自东土大唐而来,去往西天拜佛求经!"); 6 } 7 } 8 9 class TuDi extends TangSeng { 10 public void QuJing() { 11 super.QuJing(); 12 System.out.println(&

前端用到的设计模式之开闭原则. 里氏代换原则

开闭原则,如果jQuery源码稍微了解,肯定知道它的应用了. 一个模块----函数或对象,应该凭着经验来判断, 对扩展开放,对修改关闭.------ 一般用继承实现扩展,用闭包来实现关闭. 为什么开闭原则?它跟复杂度有什么关系,? 复杂度,就是一个函数里包含的功能个数;当开闭原则不遵守时,想扩展功能,必然去原来的函数里添加代码,导致原来的函数功能增加. 里氏代换原则:是对开闭原则的补充,子类可以扩展父类,但不可改变父类. function changFangxing(height,width){

设计模式 之 里氏代换原则 (Liskov&#39;s Substitution Principle)

Motivation 动机 All the time we design a program module and we create some class hierarchies. Then we extend some classes creating some derived classes. 一直以来,我们设计程序模块,并且建立类的层次关系,然后扩展类来创建派生类. We must make sure that the new derived classes just extend wi