MST
星途 面试题库

面试题:Java抽象类与接口在多态性实现中的设计应用

假设有一个图形绘制系统,需要绘制圆形、矩形等图形。请分别使用抽象类和接口来设计这个系统的架构,并说明在实现多态性时,两种设计方式各自的优势和适用场景。
26.6万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

使用抽象类设计

  1. 抽象图形类
abstract class Shape {
    abstract void draw();
}
  1. 圆形类
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("绘制圆形");
    }
}
  1. 矩形类
class Rectangle extends Shape {
    @Override
    void draw() {
        System.out.println("绘制矩形");
    }
}

使用接口设计

  1. 图形接口
interface Shape {
    void draw();
}
  1. 圆形类
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}
  1. 矩形类
class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

抽象类实现多态性的优势和适用场景

  • 优势
    • 可以包含部分实现代码,子类可以复用这些代码,减少重复代码。例如抽象类中可以定义一些通用的图形属性获取方法。
    • 抽象类可以有构造函数,用于初始化一些通用的属性。
  • 适用场景:当多个子类有很多共同的行为和状态,并且有部分通用实现时,使用抽象类更合适。比如所有图形都有颜色属性,抽象类可以提供设置和获取颜色的方法。

接口实现多态性的优势和适用场景

  • 优势
    • 一个类可以实现多个接口,实现更灵活的多态。例如一个图形类既可以实现绘制接口,还可以实现可移动接口。
    • 接口更强调行为的定义,不包含任何实现代码,实现类更加专注于自身的实现。
  • 适用场景:当需要实现多种不同维度的行为组合,或者希望实现类更加灵活地定义自己的行为时,使用接口更合适。比如一些图形需要有动画效果,一些不需要,就可以通过实现动画接口来区分。