LSP(Liskov Substitution Principle,里氏替换原则)

LSP(Liskov Substitution Principle,里氏替换原则)是面向对象编程中的一个重要原则,它要求子类对象能够替换其父类对象,而不会影响程序的正确性。下面是一个简单的例子,说明LSP的应用。

假设我们有一个图形类Shape,它有一个求面积的方法getArea(),并且有两个子类RectangleSquare,它们分别表示矩形和正方形,它们都继承自Shape类,如下所示:

public class Shape {
    // 求面积
    public double getArea() {
        return 0.0;
    }
}

public class Rectangle extends Shape {
    private double width;
    private double height;

    public void setWidth(double width) {
        this.width = width;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    @Override
    public double getArea() {
        return width * height;
    }
}

public class Square extends Shape {
    private double side;

    public void setSide(double side) {
        this.side = side;
    }

    @Override
    public double getArea() {
       return side * side;
    }
}

现在我们要设计一个计算总面积的方法getTotalArea(),它接受一个Shape类型的数组作为参数,返回数组中所有图形的总面积。根据LSP原则,我们应该能够将子类对象替换为其父类对象,而不会影响程序的正确性。

因此,在实现getTotalArea()方法时,我们可以使用Shape类的引用来操作数组中的图形对象。具体实现如下:

public static double getTotalArea(Shape[] shapes) {
    double totalArea = 0.0;
    for (Shape shape : shapes) {
        totalArea += shape.getArea();
    }
    return totalArea;
}

在这个例子中,我们使用了Shape类的引用来操作数组中的RectangleSquare对象,因为它们都继承自Shape类,并且都实现了getArea()方法。这就保证了子类对象可以替换其父类对象,而不会影响程序的正确性。

例如,我们可以创建一个包含两个矩形和一个正方形的数组,并将其传递给getTotalArea()方法进行计算:

Rectangle r1 = new Rectangle();
r1.setWidth(3.0);
r1.setHeight(4.0);

Rectangle r2 = new Rectangle();
r2.setWidth(5.0);
r2.setHeight(6.0);

Square s1 = new Square();
s1.setSide(2.0);

Shape[] shapes = {r1, r2, s1};

double totalArea = getTotalArea(shapes);
System.out.println("Total area: " + totalArea);

在这个例子中,我们创建了两个矩形和一个正方形,并将它们放入一个Shape类型的数组中,然后将数组传递给getTotalArea()方法进行计算。由于RectangleSquare类都继承自Shape类,并且都实现了getArea()方法,因此它们可以替换Shape类的对象进行计算。最终,程序输出了所有图形的总面积。

通过这个例子,我们可以看到LSP原则的应用,它允许我们在不影响程序正确性的情况下,使用子类对象替换其父类对象,从而提高了代码的灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值