MST

星途 面试题库

面试题:Java中继承与多态的实际应用场景

请举例说明在实际项目开发中,Java的继承和多态特性是如何协同工作的,至少列举两个不同类型的应用场景,并详细阐述代码实现逻辑。
11.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

应用场景一:图形绘制系统

  1. 代码实现逻辑
    • 首先定义一个Shape类作为基类,包含通用的属性和方法。例如:
abstract class Shape {
    // 颜色属性
    protected String color;
    // 设置颜色的方法
    public void setColor(String color) {
        this.color = color;
    }
    // 抽象的绘制方法,由子类具体实现
    public abstract void draw();
}
  • 然后定义Circle类继承自Shape类。
class Circle extends Shape {
    private double radius;
    public Circle(double radius) {
        this.radius = radius;
    }
    @Override
    public void draw() {
        System.out.println("绘制一个颜色为 " + color + ",半径为 " + radius + " 的圆。");
    }
}
  • 再定义Rectangle类继承自Shape类。
class Rectangle extends Shape {
    private double width;
    private double height;
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    @Override
    public void draw() {
        System.out.println("绘制一个颜色为 " + color + ",宽为 " + width + ",高为 " + height + " 的矩形。");
    }
}
  • 在主程序中,利用多态特性,通过Shape类型的变量来引用不同子类的对象。
public class ShapeDrawingApp {
    public static void main(String[] args) {
        Shape circle = new Circle(5.0);
        circle.setColor("红色");
        circle.draw();

        Shape rectangle = new Rectangle(4.0, 6.0);
        rectangle.setColor("蓝色");
        rectangle.draw();
    }
}
  1. 继承和多态协同工作原理CircleRectangle类通过继承Shape类获得了color属性和setColor方法,实现了代码复用。而在主程序中,Shape类型的变量可以引用不同子类的对象,根据实际引用对象的类型调用相应子类的draw方法,这体现了多态性。

应用场景二:游戏角色系统

  1. 代码实现逻辑
    • 定义一个Character类作为基类,包含通用的属性和方法。
abstract class Character {
    protected String name;
    protected int health;
    public Character(String name, int health) {
        this.name = name;
        this.health = health;
    }
    // 抽象的攻击方法,由子类具体实现
    public abstract void attack();
}
  • 定义Warrior类继承自Character类。
class Warrior extends Character {
    public Warrior(String name, int health) {
        super(name, health);
    }
    @Override
    public void attack() {
        System.out.println(name + "(战士)发动近战攻击!");
    }
}
  • 定义Mage类继承自Character类。
class Mage extends Character {
    public Mage(String name, int health) {
        super(name, health);
    }
    @Override
    public void attack() {
        System.out.println(name + "(法师)释放魔法攻击!");
    }
}
  • 在主程序中,通过多态来操作不同类型的角色。
public class GameApp {
    public static void main(String[] args) {
        Character warrior = new Warrior("亚瑟", 100);
        warrior.attack();

        Character mage = new Mage("安琪拉", 80);
        mage.attack();
    }
}
  1. 继承和多态协同工作原理WarriorMage类继承Character类获取了namehealth属性以及构造函数,实现代码复用。在主程序中,Character类型的变量可以分别引用WarriorMage类的对象,根据实际对象类型调用相应的attack方法,展示了多态特性。