里氏替换原则~

简介: 里氏替换原则~

里氏替换原则(Liskov Substitution Principle)是面向对象设计中的一个基本原则,它是由Barbara Liskov提出的。


如果对于每一个类型为Apple的对象1,都有类型为fruit的对象2,使得以fruit定义的所有程序 P 在所有的对象1都替换成2时,程序 P 的行为没有发生变化,那么类型 Apple是类型 fruit 的子类型。


简单点说就是子类可以替换父类并且不会影响程序的正确性,这个原则强调了子类的可替换性和灵活性。

举例:

package Reaplcetest;
class Rectangle {
    protected int width;
    protected int height;
    public void setWidth(int width) {
        this.width = width;
    }
    public void setHeight(int height) {
        this.height = height;
    }
    public int calculateArea() {
        return width * height;
    }
}
class Square extends Rectangle {
    @Override
    public void setWidth(int width) {
        this.width = width;
        this.height = width;
    }
    @Override
    public void setHeight(int height) {
        this.width = height;
        this.height = height;
    }
}
public class LiskovSubstitutionPrincipleExample {
    public static void main(String[] args) {
       //将子类对象Square的值赋值给父类对象rectangle
        Rectangle rectangle = new Square();
        rectangle.setWidth(5);
        rectangle.setHeight(10);
        System.out.println("Area: " + rectangle.calculateArea()); // 输出 100,而不是预期的 50
    }
}

上述实例违背了里氏替换原则,如下所示:

使用子类对象square的值赋值给rectangle对象,程序出现了错误的计算结果,因此子类对象没有完全代替父类对象的行为,违背了里氏替换原则

//该调用顺序下---输出100
rectangle.setWidth(5);
rectangle.setHeight(10);
//该调用顺序下---输出25
rectangle.setHeight(10);
rectangle.setWidth(5);      
相关文章
|
5月前
|
设计模式
设计模式 六大原则之里氏替换原则
设计模式 六大原则之里氏替换原则
|
算法 Java 数据处理
依赖倒转原则是什么?
依赖倒转原则是什么?
|
测试技术
迪米特法则~
迪米特法则~
|
Java
深入理解开闭原则、里氏替换原则
深入理解开闭原则、里氏替换原则
195 0
|
设计模式
里氏替换原则|设计原则
里氏替换原则的内容可以描述为: “派生类(子类)对象可以在程序中代替其基类(超类)对象。”
|
XML JSON 数据格式
单一职责原则详解
单一职责原则详解
203 0
|
算法
设计原则(四):LSP 里氏替换原则
设计原则(四):LSP 里氏替换原则
168 0
|
设计模式
设计模式(六)之里氏替换原则
里氏替换原则,为继承定义规范。 里氏替换原则有如下特点:代码共享,减少创建类的工作量、提高代码的重用性、提高代码的可扩展性、提高产品代码的开放性、继承侵入性 只要继承,必须拥有父类的内容、降低代码的灵活性,子类必须拥有父类的属性和方法、增强耦合性。
199 0
设计模式(六)之里氏替换原则
|
设计模式 Java
【Java设计模式】如何正确的使用继承?里氏替换原则的使用
【Java设计模式】如何正确的使用继承?里氏替换原则的使用
【Java设计模式】如何正确的使用继承?里氏替换原则的使用