MST

星途 面试题库

面试题:Java抽象类成员变量与方法在多态中的表现

假设有一个抽象类 `Shape`,包含抽象方法 `draw` 和成员变量 `color`。定义两个子类 `Circle` 和 `Rectangle` 继承自 `Shape`。请编写代码实现不同形状根据自身特点绘制并展示颜色,解释在多态调用过程中,抽象类的成员变量和方法是如何被访问和处理的。
15.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
abstract class Shape {
    protected String color;

    public Shape(String color) {
        this.color = color;
    }

    public abstract void draw();
}

class Circle extends Shape {
    public Circle(String color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制圆形,颜色:" + color);
    }
}

class Rectangle extends Shape {
    public Rectangle(String color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.println("绘制矩形,颜色:" + color);
    }
}

在多态调用过程中:

  1. 抽象类的成员变量:抽象类的成员变量通过继承机制被子类继承。当通过子类对象访问成员变量时,访问的是从抽象类继承过来的成员变量。在上述代码中,CircleRectangle 子类都继承了 Shape 类的 color 成员变量,在 draw 方法中可以直接访问 color 变量来展示形状的颜色。
  2. 抽象类的方法:抽象类中的抽象方法必须在子类中被实现,这是实现多态的关键。当通过父类引用指向子类对象,并调用抽象方法时,实际执行的是子类中重写的方法。例如,Shape shape1 = new Circle("红色"); shape1.draw();,这里 shape1 虽然是 Shape 类型,但实际指向 Circle 对象,调用 draw 方法时执行的是 Circle 类中重写的 draw 方法,输出 “绘制圆形,颜色:红色”。这就是多态的体现,同一个方法调用,根据对象的实际类型执行不同的行为。