JAVA中的几何图形类与派生类的设计

几何图形是数学中的重要概念,我们经常会遇到各种形状的物体,如圆形、矩形、三角形等。在JAVA编程中,我们可以使用面向对象的方式来描述和处理这些几何图形。本文将介绍如何定义一个几何图形的基类Shape,并以圆形为例定义一个派生类Circle

1. Shape类的设计

我们首先来定义一个几何图形的基类Shape,它包含了常见的属性和方法。

public abstract class Shape {
    protected String color;
    protected boolean filled;
    
    public Shape() {
        this.color = "red";
        this.filled = true;
    }
    
    public Shape(String color, boolean filled) {
        this.color = color;
        this.filled = filled;
    }
    
    public String getColor() {
        return color;
    }
    
    public void setColor(String color) {
        this.color = color;
    }
    
    public boolean isFilled() {
        return filled;
    }
    
    public void setFilled(boolean filled) {
        this.filled = filled;
    }
    
    public abstract double getArea();
    
    public abstract double getPerimeter();
    
    @Override
    public String toString() {
        return "Shape[color=" + color + ", filled=" + filled + "]";
    }
}

上述代码中,Shape类是一个抽象类,它具有两个实例变量colorfilled,表示几何图形的颜色和是否填充。构造方法可根据需要进行重载,用于初始化实例变量。getColorsetColor方法用于获取和设置颜色,isFilledsetFilled方法用于获取和设置填充状态。

此外,Shape类还定义了两个抽象方法getAreagetPerimeter,分别用于计算几何图形的面积和周长。由于不同的几何图形计算面积和周长的方式不同,因此这两个方法在基类中只做了抽象声明,具体的实现由派生类完成。

最后,Shape类重写了toString方法,用于返回一个描述几何图形属性的字符串。

2. Circle类的设计

接下来我们以圆形为例,定义一个派生类Circle,继承自Shape类。

public class Circle extends Shape {
    protected double radius;
    
    public Circle() {
        super();
        this.radius = 1.0;
    }
    
    public Circle(double radius) {
        super();
        this.radius = radius;
    }
    
    public Circle(double radius, String color, boolean filled) {
        super(color, filled);
        this.radius = radius;
    }
    
    public double getRadius() {
        return radius;
    }
    
    public void setRadius(double radius) {
        this.radius = radius;
    }
    
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
    
    @Override
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
    
    @Override
    public String toString() {
        return "Circle[" + super.toString() + ", radius=" + radius + "]";
    }
}

Circle类中,我们定义了一个实例变量radius,表示圆形的半径。构造方法可根据需要进行重载,用于初始化实例变量。getRadiussetRadius方法用于获取和设置半径。

同时,Circle类重写了getAreagetPerimeter方法,根据圆形的半径计算面积和周长。toString方法也进行了重写,用于返回一个描述圆形属性的字符串。

3. 示例代码及运行结果

下面是一个使用ShapeCircle类的示例代码:

public class Main {
    public static void main(String[] args) {
        Shape shape = new Circle(5.0, "blue", true);
        System.out.println(shape);
        System.out.println("Area: " + shape.getArea());
        System.out.println("Perimeter: " + shape.getPerimeter());
    }
}

运行结果如下:

Circle[Shape[color=blue, filled=true], radius=5.0]
Area: 78.53981633974483
Perimeter: 31.41592653589793

以上代码