以一个简单的图形绘制程序为例,其中我们将创建一个抽象类`Shape`,它定义了所有形状共有的行为和属性,同时允许具体的子类提供自己的实现。
首先,我们定义一个抽象类`Shape`:
```java public abstract class Shape { // 形状的共有属性,颜色 protected String color; // 构造函数,设置形状的颜色 public Shape(String color) { this.color = color; } // 抽象方法,计算形状的面积 public abstract double calculateArea(); // 抽象方法,计算形状的周长 public abstract double calculatePerimeter(); // 非抽象方法,显示形状的颜色 public void displayColor() { System.out.println("The shape is " + color + "."); } } ```
在这个`Shape`类中,我们定义了一个保护属性`color`,它存储了形状的颜色。我们还定义了两个抽象方法`calculateArea()`和`calculatePerimeter()`,它们要求子类提供具体的实现来计算面积和周长。
此外,我们还提供了一个非抽象方法`displayColor()`,它用来输出形状的颜色信息。
接下来,我们创建两个具体的子类`Circle`和`Rectangle`,它们继承自`Shape`类,并实现抽象方法:
```java public class Circle extends Shape { private double radius; // 构造函数 public Circle(String color, double radius) { super(color); this.radius = radius; } // 实现计算面积的方法 @Override public double calculateArea() { return Math.PI * radius * radius; } // 实现计算周长的方法 @Override public double calculatePerimeter() { return 2 * Math.PI * radius; } } public class Rectangle extends Shape { private double width; private double height; // 构造函数 public Rectangle(String color, double width, double height) { super(color); this.width = width; this.height = height; } // 实现计算面积的方法 @Override public double calculateArea() { return width * height; } // 实现计算周长的方法 @Override public double calculatePerimeter() { return 2 * (width + height); } } ```
在`Circle`和`Rectangle`类中,我们添加了各自的属性,并提供了计算面积和周长的具体实现。这样,我们就可以根据具体的图形类型来创建对象,并使用它们的方法。
最后,我们可以创建一个简单的测试程序来演示这些类的使用:
```java public class ShapeDemo { public static void main(String[] args) { // 创建一个圆形对象 Circle circle = new Circle("Red", 5.0); // 创建一个矩形对象 Rectangle rectangle = new Rectangle("Blue", 4.0, 6.0); // 显示形状的颜色 circle.displayColor(); rectangle.displayColor(); // 计算并显示圆形的面积和周长 System.out.println("Circle area: " + circle.calculateArea()); System.out.println("Circle perimeter: " + circle.calculatePerimeter()); // 计算并显示矩形的面积和周长 System.out.println("Rectangle area: " + rectangle.calculateArea()); System.out.println("Rectangle perimeter: " + rectangle.calculatePerimeter()); } } ```
在这个`ShapeDemo`类的`main`方法中,我们创建了一个红色的圆形和一个蓝色的矩形。我们调用了`displayColor()`方法来显示它们的颜色,以及调用了`calculateArea()`和`calculatePerimeter()`方法来计算和显示它们的面积和周长。
这个简单的例子展示了抽象类如何定义共有的行为和属性,以及具体的子类如何提供这些行为的具体实现。通过这种方式,我们可以创建一个灵活且可扩展的图形绘制程序,它可以轻松地添加新的形状类型。