3. java代码,里氏替换原则,要求有类图

44 阅读2分钟

好的,下面给出一个Java代码示例和对应的类图,演示里氏替换原则的应用。

假设我们要实现一个简单的图形库,其中有一个基类Shape表示各种形状,包括正方形(Square)、长方形(Rectangle)和圆形(Circle)。这些子类都继承自Shape,可以用来表示不同的图形对象。

首先是Shape类的代码:

public class Shape {
    protected double area;
    public double getArea() {
        return area;
    }
}

这个类中只有一个属性area表示面积,以及一个getArea方法用来获取面积。由于这个类是抽象的,所以没有具体实现。

然后是Square类的代码:

public class Square extends Shape {
    private double side;
    public Square(double side) {
        this.side = side;
        this.area = side * side;
    }
}

这个类表示正方形,有一个私有属性side表示边长,以及一个构造方法用来计算面积。

接下来是Rectangle类的代码:

public class Rectangle extends Shape {
    private double width;
    private double height;
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
        this.area = width * height;
    }
}

这个类表示长方形,有两个私有属性width和height分别表示宽度和高度,以及一个构造方法用来计算面积。

最后是Circle类的代码:

public class Circle extends Shape {
    private double radius;
    public Circle(double radius) {
        this.radius = radius;
        this.area = Math.PI * radius * radius;
    }
}

这个类表示圆形,有一个私有属性radius表示半径,以及一个构造方法用来计算面积。

下面给出对应的类图:

在这个例子中,Square、Rectangle和Circle都继承自Shape,但是它们并没有修改Shape中的任何方法定义。因此,我们可以在任何需要Shape对象的地方使用Square、Rectangle和Circle对象,而不会影响程序的正确性。

同时,Square、Rectangle和Circle也可以定义自己独特的方法,来实现各自的功能。如果这些方法符合里氏替换原则,就可以保证程序的稳定性和可扩展性。