本文目录一览

1,java什么是里氏替换原则

子类可以替换父类了也就是是父类出现的地方都可以用子类替代switch不存在这个概念吧
所谓里氏替换原则,就是让你的某一段程序耦合于基类或者接口,而不是具体继承了基类的子类或实现接口的具体类型。仅替换子类不会让你这个程序的属性有所改变。所谓多态机制,则是给了你达成上述原则的其中一种能力。举个栗子来说,同样是list基类/接口,子类可以是用array实现也可以用linkedlist实现,但都必须实现at方法(得到具体某个index的值)。你现在用list实现了一个找最小值的算法,我们假设你是一个个遍历过去找的,那么不管底下是array实现还是linkedlist实现(子类替换),你的算法都应该是返回最小值(属性不变),只是用linkedlist的时候很蠢。而你知道at方法对于array和linkedlist实现是不一样的,list调用at的时候根据底下具体的实现决定调用哪一个,这货就叫做多态。

java什么是里氏替换原则

2,继承的说话与里氏替换原则

也就是说基类所能提供的服务(所提供的功能)能够在自类中有所作用。 比如鸟基类和继承自他的燕子类,鸟类有飞行的方法,而燕子可以继承使用这个方法,他们就合适作为继承。 而鸵鸟就不适合继承自鸟,因为鸵鸟修改了他父类的功能,也就是屏蔽掉了。回答补充:面向对象设计的原则是这样的,并不是说一定,只不过如果子类会屏蔽或者修改父类行为,那么这种继承就不是一个好的设计而已。你当然可以把一个垃圾桶继承自水桶,但是水桶是放水的,而垃圾桶屏蔽了水桶的放水的功能而放垃圾了,当你使用多态特性的时候你会发现你有可能把水放在一个垃圾桶里面,这水还能喝么?
在面向对象思想中可知,派生类拥有基类向下公开的所有特征,它是基类的一个特例。 当派生类对象赋于基类类型时,将出现以下情况:派生类的数据结构依次对应于基类的数据结构。而派生类拥有的自己的数据将不可见。 当基类的对象试图转换为派生类型时,将出现基类对象的数据无法依次填充完派生类的所有数据结构。这就造成了它将无法完成派生类定义的功能。编译器将会提示甚至报错。 这就是派生类能胜任基类功能,而基类却无法完全胜任派生类功能的原因。 强制转换属于 基类到派生的过程:那是因为 设计人员知道:该基类对象的数据结构完全可以填充完派生类的结构。否则,将出现强转错误。一般最好避免使用强转! 还有,子类能够出现在任何父类对象出现的地方不是完全正确的,父类有时也不会将自己的一些成员公开给子类。

继承的说话与里氏替换原则

3,谁能用一句通俗的话来说名一下java中的里氏代换原则

里氏代换原则(LSP):如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。换言之,一个软件实体如果使用的是一个基类的话,那么一定使用于其子类,而且它根本不能察觉出基类对象和子类对象的区别。里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不会受到影响时,基类才真正被复用,而衍生类也才能够在基类的基础上增加新的行为。
就是 父类引用只能指向子类的实例!!!!! 这个意思还可以说:子类的引用不能指向父类的实例够简单了吧
都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时。里氏代换原则是继承复用的基石
李氏代换原则,如果把“人”当成父类,“程序员”可以看成是他的子类,程序员肯定是人,但人不一定就是程序员,例:人还可能是司机教师等,它们不一定会编程 所以把父类声明实例化的对象强制转换为子类对象会发生异常
就是 父类引用只能指向子类的实例!!!!! 这个意思还可以说:子类的引用不能指向父类的实例够简单了吧
李氏代换原则,如果把“人”当成父类,“程序员”可以看成是他的子类,程序员肯定是人,但人不一定就是程序员,例:人还可能是司机教师等,它们不一定会编程 所以把父类声明实例化的对象强制转换为子类对象会发生异常

谁能用一句通俗的话来说名一下java中的里氏代换原则

4,如何理解里氏替换原则

我简单的给你说一下吧。首先,这是编译器的要求,如果不这么做,无法通过编译。其次,面向对象的编程,其中继承有个大原则,任何子类的对象都可以当成父类的对象使用。如有父类人类,可以使用一般的枪,有警察类,可以使用任何的枪。class Person void shoot(SimpleGun simpleGun);}class Police extends Person void shoot(Gun gun);}其中SimpleGun extends Gun。这样的话任何警察类的对象都可以被当做人类来使用。也就是说警察类既然会使用任何的枪,当然可以使用一般的枪。Person person = new Police();person.shoot(simpleGun);而如果反过来,普通人可以使用任何抢,警察只能使用一般枪。class Person void shoot(Gun gun);}class Police extends Person void shoot(SimpleGun simpleGun);}这样的话就不合理了,既然警察是人类的一个子类,所以警察也是人类,既然是人类就应该能使用人类的方法,也就是使用任何的枪,可以根据上面的定义,反而警察类的能力还变小了。所以有一个原则,子类的能力必须大于等于父类,即父类可以使用的方法,子类都可以使用。返回值也是同样的道理。假设一个父类方法返回一个List,子类返回一个ArrayList,这当然可以。如果父类方法返回一个ArrayList,子类返回一个List,就说不通了。这里子类返回值的能力是比父类小的。还有抛出异常的情况。任何子类方法可以声明抛出父类方法声明异常的子类。而不能声明抛出父类没有声明的异常。这一切都是为了,任何子类的对象都可以当做父类使用。

5,里氏替换原则的简介

在面向对象思想中可知,派生类拥有基类向下公开的所有特征,它是基类的一个特例。 当派生类对象赋于基类类型时,将出现以下情况:派生类的数据结构依次对应于基类的数据结构。而派生类拥有的自己的数据将不可见。 当基类的对象试图转换为派生类型时,将出现基类对象的数据无法依次填充完派生类的所有数据结构。这就造成了它将无法完成派生类定义的功能。编译器将会提示甚至报错。 这就是派生类能胜任基类功能,而基类却无法完全胜任派生类功能的原因。 强制转换属于 基类到派生的过程:那是因为 设计人员知道:该基类对象的数据结构完全可以填充完派生类的结构。否则,将出现强转错误。一般最好避免使用强转! 还有,子类能够出现在任何父类对象出现的地方不是完全正确的,父类有时也不会将自己的一些成员公开给子类。
里氏替换原则(liskov substitution principle lsp)面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 lsp是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。如此,问题产生了:“我们如何去度量继承关系的质量?”liskov于1987年提出了一个关于继承的原则“inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“继承必须确保超类所拥有的性质在子类中仍然成立。”也就是说,当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-a关系。该原则称为liskov substitution principle——里氏替换原则。林先生在上课时风趣地称之为“老鼠的儿子会打洞”。^_^

6,里氏替换原则与依赖倒置原则有什么区别

区别:1. 定义不同:里氏替换原则是关于子类与父类的原则;依赖倒置原则是关于抽象与细节的原则。2. 应用范围不同:依赖倒置原则的应用范围比里氏替换原则更广泛。3. 涉及的对象关系不同:里氏替换原则中的子类具有自己的独立性;依赖倒置原则中的细节依赖于抽象。衍生知识点:一、里氏替换原则定义1:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。定义2:所有引用基类的地方必须能透明地使用其子类的对象。通俗来讲:子类可以扩展父类的功能,但不能改变父类原有的功能。是OCP的扩展。它包含以下四层含义:1. 子类可以实现父类的抽象,但不能覆盖父类的非抽象方法2. 子类中可以增加自己特有的方法3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入更宽松4. 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类的更严格二、依赖倒置原则定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B和类C发生联系,则会大大降低修改类A的几率。核心思想:面向接口编程。含有下面3点:1. 低层模块尽量都要有抽象类或接口,或者两者都有2. 变量的声明类型尽量使抽象类或接口3. 用继承时遵循里氏替换原则
里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。依赖倒置原则 A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。 B.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。

文章TAG:里氏替换原则  java什么是里氏替换原则  
下一篇