- 接口的应用场景及代码示例:
- 应用场景:在图形绘制系统中,当不同图形有一些共同的行为,但这些行为的实现细节差异较大,且不需要共享状态或实现时,适合使用接口。例如,所有图形都可能需要支持获取自身面积的操作,但不同图形计算面积的方式完全不同。
- 代码示例:
// 定义一个计算面积的接口
interface ShapeArea {
double getArea();
}
- 接口在系统中的作用:通过定义
ShapeArea
接口,不同的图形类(圆形、矩形、三角形等)可以实现这个接口,保证它们都具有获取面积的能力,提高了系统的可扩展性和灵活性。
- 抽象类的应用场景及代码示例:
- 应用场景:当不同图形有一些共同的属性或部分共同的行为实现时,适合使用抽象类。比如,所有图形可能都有颜色这个属性,并且可能有一些通用的绘制前准备操作。
- 代码示例:
// 定义一个抽象的图形类
abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
// 抽象方法,留给具体图形类实现
public abstract void draw();
// 具体实现的方法
public void prepareToDraw() {
System.out.println("准备绘制 " + color + " 的图形");
}
}
- 抽象类在系统中的作用:
Shape
抽象类为所有具体图形类提供了一个公共的基础,子类可以继承它并复用其中的属性和方法(如color
属性和prepareToDraw
方法),同时强制子类实现抽象方法(如draw
方法),保证了一定的一致性。
- 接口和抽象类的交互与协作:
- 具体的图形类可以继承抽象类
Shape
并实现接口ShapeArea
。例如圆形类:
class Circle extends Shape implements ShapeArea {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public void draw() {
System.out.println("绘制 " + color + " 的圆形");
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
}
- 在这个系统中,
Shape
抽象类提供了图形的基本属性和部分通用行为,ShapeArea
接口定义了获取面积的行为规范。具体图形类(如Circle
)通过继承抽象类获得通用部分,并通过实现接口满足特定行为要求,从而实现了接口和抽象类的良好协作,构建出一个灵活且可扩展的图形绘制系统。
public class GraphicsSystem {
public static void main(String[] args) {
Circle circle = new Circle("红色", 5);
circle.prepareToDraw();
circle.draw();
System.out.println("圆形面积: " + circle.getArea());
}
}