MST
星途 面试题库

面试题:基于特定场景选择Java抽象类或接口的设计考量

假设要设计一个图形绘制的框架,其中有圆形、矩形等图形。部分图形可能有一些共有的基础属性和方法,同时不同图形又有各自独特的绘制逻辑。在这种场景下,你会选择使用抽象类还是接口来进行设计?请详细说明你的设计思路以及选择的原因。
41.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 使用抽象类
    • 定义一个抽象的Shape类,包含共有的基础属性,如颜色color,位置position等。还可以包含一些共有的抽象方法,比如draw方法,不同图形具体的绘制逻辑由子类实现。
    • 对于圆形Circle类,继承自Shape类,实现draw方法,按照圆形的绘制逻辑,使用给定的圆心位置、半径等属性来绘制圆形。
    • 对于矩形Rectangle类,同样继承自Shape类,实现draw方法,根据矩形的长、宽以及位置属性来绘制矩形。
  2. 使用接口
    • 定义一个Shape接口,包含draw方法。每个具体图形类(如CircleRectangle)实现该接口,并实现各自的draw方法。但是共有的基础属性需要在每个类中单独定义和管理。

选择原因

选择抽象类。原因如下:

  1. 属性共享:抽象类可以包含成员变量,能方便地实现基础属性的共享,减少代码冗余。例如上述提到的颜色、位置属性,不同图形都可以直接从抽象类继承这些属性,而接口中不能定义成员变量,若使用接口则每个图形类都需重复定义这些属性。
  2. 代码复用:抽象类中可以有实现的方法,若存在一些共有的通用逻辑,可以在抽象类中实现,子类直接复用,无需重复编写。而接口中方法都是抽象的,不能提供实现代码。虽然不同图形有独特绘制逻辑,但仍可能存在一些通用逻辑可放在抽象类中,比如图形绘制前的一些准备工作等。
  3. 关系表达:使用抽象类能更好地表达图形之间的继承关系,体现出它们同属于图形这一概念范畴,符合现实世界中对图形分类的认知。而接口主要用于实现多态,对于这种具有明显继承层次关系的场景,抽象类更为合适。