MST

星途 面试题库

面试题:Java中多态如何通过方法重写简化代码结构

请举例说明在Java中,子类如何通过方法重写实现多态,并且阐述这种方式是怎样简化代码结构的,比如在一个图形绘制的项目场景下,父类为Shape,子类有Circle和Rectangle,如何利用多态简化绘制代码?
44.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 子类通过方法重写实现多态的示例
    • 在Java中,定义一个父类Shape,它有一个抽象方法draw
abstract class Shape {
    public abstract void draw();
}
  • 定义子类CircleRectangle继承自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();
    }
}
  1. 在图形绘制项目场景下简化代码结构的阐述
    • 未使用多态时:如果不使用多态,对于不同图形的绘制,可能需要编写大量的条件判断语句。例如:
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类的核心代码,遵循了开闭原则,使代码更易于维护和扩展。