以一个简单的图形绘制程序为例,其中我们将创建一个抽象类`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()`方法来计算和显示它们的面积和周长。
这个简单的例子展示了抽象类如何定义共有的行为和属性,以及具体的子类如何提供这些行为的具体实现。通过这种方式,我们可以创建一个灵活且可扩展的图形绘制程序,它可以轻松地添加新的形状类型。