1. 类设计
// 抽象类Shape
abstract class Shape {
// 抽象方法calculateArea
abstract double calculateArea();
}
// Circle子类
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
double calculateArea() {
return Math.PI * radius * radius;
}
}
// Rectangle子类
class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
double calculateArea() {
return width * height;
}
}
2. 实现calculateArea
方法
- 在
Circle
子类中,根据圆的面积公式S = πr²
,在calculateArea
方法中返回Math.PI * radius * radius
。
- 在
Rectangle
子类中,根据矩形的面积公式S = 长×宽
,在calculateArea
方法中返回width * height
。
3. 遵循抽象类设计原则保证扩展性和灵活性
- 单一职责原则:
Shape
抽象类只负责定义与形状相关的通用行为(即计算面积的抽象方法),不涉及具体形状的细节。每个子类Circle
和Rectangle
只负责实现自己特定形状的面积计算逻辑,职责清晰。
- 开闭原则:当需要添加新的形状(如三角形)时,只需要创建一个新的子类继承自
Shape
,并实现calculateArea
方法,而不需要修改Shape
类及其现有子类的代码,保证了代码的扩展性。
- 依赖倒置原则:高层模块(如使用这些形状类的业务逻辑代码)不依赖于低层模块(具体的形状实现类),而是依赖于抽象类
Shape
。这样当具体的形状实现发生变化时,高层模块的代码不需要修改,提高了代码的灵活性。