Skip to content

LSP

约 193 字小于 1 分钟

2025-05-14

违反里氏替换原则的设计

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 getArea() {
        return width * height;
    }
}

class Square extends Rectangle {
    // 正方形的宽高必须相等,所以重写了设置方法
    @Override
    public void setWidth(int width) {
        this.width = width;
        this.height = width;  // 违反LSP,改变了父类的行为
    }
    
    @Override
    public void setHeight(int height) {
        this.height = height;
        this.width = height;  // 违反LSP,改变了父类的行为
    }
}

符合里氏替换原则的设计

interface Shape {
    int getArea();
}

class ImprovedRectangle implements Shape {
    private int width;
    private int height;
    
    public void setWidth(int width) {
        this.width = width;
    }
    
    public void setHeight(int height) {
        this.height = height;
    }
    
    public int getArea() {
        return width * height;
    }
}

class ImprovedSquare implements Shape {
    private int side;
    
    public void setSide(int side) {
        this.side = side;
    }
    
    public int getArea() {
        return side * side;
    }
}

From: Claude-3.5

贡献者