MST

星途 面试题库

面试题:Java多态中接口实现对多态性影响的基础应用

假设有一个接口 `Shape` ,包含方法 `draw()` 。创建两个类 `Circle` 和 `Rectangle` 实现 `Shape` 接口。编写一个测试类,在其中创建一个 `Shape` 类型的数组,分别放入 `Circle` 和 `Rectangle` 的实例,并遍历数组调用 `draw()` 方法,解释这里体现的多态性以及接口在其中起到的作用。
13.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

public class TestShape {
    public static void main(String[] args) {
        Shape[] shapes = new Shape[2];
        shapes[0] = new Circle();
        shapes[1] = new Rectangle();

        for (Shape shape : shapes) {
            shape.draw();
        }
    }
}

多态性体现

  1. 编译时多态:在 Shape[] shapes = new Shape[2]; 这行代码中,声明了一个 Shape 类型的数组,它可以存放任何实现了 Shape 接口的对象,这里体现了编译时多态,即通过接口类型来引用不同实现类的对象。
  2. 运行时多态:在遍历数组 for (Shape shape : shapes) { shape.draw(); } 过程中,shape.draw() 方法在运行时根据 shape 实际指向的对象类型(CircleRectangle)来调用对应的 draw 方法,这体现了运行时多态。即同样的方法调用语句,在运行时根据对象的实际类型执行不同的实现。

接口作用

  1. 规范行为:接口 Shape 定义了 draw 方法,这就规范了所有实现它的类(如 CircleRectangle)必须提供 draw 方法的具体实现,使得不同形状类有统一的绘制行为定义。
  2. 实现多态:接口作为一种引用类型,使得 Shape 类型的数组可以存放 CircleRectangle 等不同实现类的对象,进而在遍历数组调用 draw 方法时实现多态行为,提高了代码的灵活性和可扩展性。如果需要添加新的形状类(如 Triangle),只需要让 Triangle 类实现 Shape 接口,就可以很方便地添加到 Shape 数组中并参与多态调用,而不需要修改大量现有代码。