- 子类通过方法重写实现多态的示例:
- 在Java中,定义一个父类
Shape
,它有一个抽象方法draw
:
abstract class Shape {
public abstract void draw();
}
- 定义子类
Circle
和Rectangle
继承自Shape
,并实现draw
方法:
class Circle extends Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
class Rectangle extends Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
- 在使用时,可以通过父类类型的变量来引用不同子类的对象,调用
draw
方法时会表现出不同的行为,这就是多态:
public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw();
shape2.draw();
}
}
- 在图形绘制项目场景下简化代码结构的阐述:
- 未使用多态时:如果不使用多态,对于不同图形的绘制,可能需要编写大量的条件判断语句。例如:
class GraphicDrawer {
public void drawShape(String shapeType) {
if ("circle".equals(shapeType)) {
System.out.println("绘制圆形");
} else if ("rectangle".equals(shapeType)) {
System.out.println("绘制矩形");
}
}
}
- 使用多态后:使用多态后,代码结构得到了极大简化。可以将不同图形的绘制逻辑封装在各自的子类中,通过父类类型的集合来管理不同的图形对象。例如:
import java.util.ArrayList;
import java.util.List;
class GraphicDrawer {
private List<Shape> shapes = new ArrayList<>();
public void addShape(Shape shape) {
shapes.add(shape);
}
public void drawAllShapes() {
for (Shape shape : shapes) {
shape.draw();
}
}
}
- 这样,在添加新的图形子类(如
Triangle
)时,只需要创建新的子类并实现draw
方法,无需修改GraphicDrawer
类的核心代码,遵循了开闭原则,使代码更易于维护和扩展。