`
dr2tr
  • 浏览: 142247 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Liskov Substitution Principle

阅读更多

Liskov Substitution Principle, 由Barbara Liskov 和 Jeannette Wing在93年提出,其原文为:“Let q(x) be a property provable about objects x of type T. Then q(y) should be true for objects y of type S where S is a subtype of T. ” 。通俗一点来说,LSP的意思是指,“An instance of a class should function as an instance of its superclass” (《Design Pattern Java Workbook》)。

字面上的意思不好理解,举一段程序:

import java.util.*;
public class a{
    
public static void main(String args[]){
        String names[] 
= {"name1""name2"};
        
        List L 
= Arrays.asList(names);
        L.add(
"name3");
        
}
}

这段程序运行结果是什么?答案是:

java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(Unknown Source)
    at java.util.AbstractList.add(Unknown Source)
    at a.main(a.java:
7)
Exception in thread 
"main" 

抛出异常的原因是由 asList() 返回的List不支持add方法。而我们只要把代码改为:

List L = new ArrayList(Arrays.asList(names));

运行就正常了。

我们知道,List, ArrayList, Array 都有一个公共的父类(接口)Collection, asList 最初就是在Collection声明的,所以我们说,这里违反了LSP原则。(当然,从字面上讲,这么说还需要我们把Java接口看成pure的虚类来看)

其实这只是很小的一点,记下备忘

分享到:
评论

相关推荐

    Substitution principle

    里氏替换原则(Liskov Substitution Principle, LSP)是面向对象编程设计的基本原则之一,由美国计算机科学家芭芭拉·利斯科夫(Barbara Liskov)于1987年提出。该原则强调了继承在设计类层次结构时的重要性与正确性...

    24种设计模式C#版

    2、里氏替换原则【LISKOV SUBSTITUTION PRINCIPLE】:继承与派生的规则.(子类可替换父类) 3、依赖倒转原则【DEPENDENCE INVERSION PRINCIPLE】:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该...

    Java_面向对象设计原则总结

    2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed ...

    设计模式总结

    里氏替换原则(Liskov Substitution Principle,LSP) 只要父类出现的地方都可以用子类替换。 依赖倒置原则(Dependece Inversion Principle,DIP) 面向接口编程。细节应该依赖抽象。 依赖可以传递。 依赖有三...

    Java23种基本的设计模式整料整理学习源码示例zip

    里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的...

    99 Bottles of OOP A Practical Guide to Object-Oriented Design 1st Edition

    Avoiding conditionals by obeying the Liskov Substitution Principle Making targeted improvements by reducing Code Smells Improving changeability with polymorphism Manufacturing role-playing objects ...

    JAVA六大原则代码.zip

    里氏替换原则(Liskov Substitution Principle,LSP):子类应该能够替换掉父类并且工作正常,即子类必须能够完全替代父类的功能而不产生错误。这个原则保证了代码的可靠性和稳定性。 接口隔离原则(Interface ...

    24种设计模式介绍与6大设计原则

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    面向对象的设计原则

    2. **替换原则(Liskov Substitution Principle, LSP)** LSP原则指出,子类应该可以替换其父类并能在任何父类可以出现的地方使用。这意味着子类不应破坏基类的原有行为。例如,圆是椭圆的特殊情况,所以任何使用...

    设计模式Demo

    里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能...

    【设计模式】基于c#23种设计模式案例实现.zip

     Liskov Substitution Principle,LSP(里氏代替原则)指的是子类必须替换掉它们的父类型。也就是说,在软件开发过程中,子类替换父类后,程序的行为是一样的。只有当子类替换掉父类后,此时软件的功能不受影响时,...

    Java 设计模式

    2、里氏代换原则(Liskov Substitution Principle)  只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 3、依赖倒转原则(Dependence ...

    OOD面试应对方法 SOLID原则.mp4

    应届生及亚马逊面试必考,IT求职必备基础。...L - Liskov substitution principle 里氏替换原则 I - Interface segregation principle 接口分离原则 D - Dependency Inversion Principle 依赖反转原则

    Java 23种设计模式详解

    2、里氏代换原则(Liskov Substitution Principle) 3、依赖倒转原则(Dependence Inversion Principle) 4、接口隔离原则(Interface Segregation Principle) 5、迪米特法则(最少知道原则)(Demeter Principle)...

    深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP

    前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle )。 英文原文:...

    类设计原则

    3. 里氏替换原则(Liskov Substitution Principle, LSP) 子类必须能够替换其基类,而不影响程序的正确性。这意味着子类可以无缝地在基类被使用的任何地方使用,保持接口的一致性。 4. 接口隔离原则(Interface ...

    java面向对象设计的六大原则

    以下将详细介绍面向对象设计的六大原则:单一职责原则(Single Responsibility Principle, SRP)、开放封闭原则(Open-Closed Principle, OCP)、里氏替换原则(Liskov Substitution Principle, LSP)、依赖倒置原则...

    Java 66 道面试题及答案.docx

    2. 里氏代换原则(Liskov Substitution Principle):使用的基类可以在任何地方使用继承的子类,完美的替换基类。 3. 依赖倒转原则(Dependence Inversion Principle):面向接口编程,依赖于抽象而不依赖于具体。 4...

    61条面向对象设计的经验面试题

    3. **里氏替换原则(Liskov Substitution Principle, LSP)**:子类型必须能够替换它们的基类型,而不影响程序的正确性。这保证了代码的可替换性和兼容性。 4. **接口隔离原则(Interface Segregation Principle, ...

    面向对象七大原则

    6. 里氏替换原则(Liskov Substitution Principle) 里氏替换原则是指子类可以替换父类。里氏替换原则可以使代码更灵活、更易维护。 7. 组合优于继承原则(Composition Over Inheritance Principle) 组合优于...

Global site tag (gtag.js) - Google Analytics