面试题答案
一键面试设计思路
- 使用抽象类:
- 定义一个抽象的
Shape
类,包含共有的基础属性,如颜色color
,位置position
等。还可以包含一些共有的抽象方法,比如draw
方法,不同图形具体的绘制逻辑由子类实现。 - 对于圆形
Circle
类,继承自Shape
类,实现draw
方法,按照圆形的绘制逻辑,使用给定的圆心位置、半径等属性来绘制圆形。 - 对于矩形
Rectangle
类,同样继承自Shape
类,实现draw
方法,根据矩形的长、宽以及位置属性来绘制矩形。
- 定义一个抽象的
- 使用接口:
- 定义一个
Shape
接口,包含draw
方法。每个具体图形类(如Circle
和Rectangle
)实现该接口,并实现各自的draw
方法。但是共有的基础属性需要在每个类中单独定义和管理。
- 定义一个
选择原因
选择抽象类。原因如下:
- 属性共享:抽象类可以包含成员变量,能方便地实现基础属性的共享,减少代码冗余。例如上述提到的颜色、位置属性,不同图形都可以直接从抽象类继承这些属性,而接口中不能定义成员变量,若使用接口则每个图形类都需重复定义这些属性。
- 代码复用:抽象类中可以有实现的方法,若存在一些共有的通用逻辑,可以在抽象类中实现,子类直接复用,无需重复编写。而接口中方法都是抽象的,不能提供实现代码。虽然不同图形有独特绘制逻辑,但仍可能存在一些通用逻辑可放在抽象类中,比如图形绘制前的一些准备工作等。
- 关系表达:使用抽象类能更好地表达图形之间的继承关系,体现出它们同属于图形这一概念范畴,符合现实世界中对图形分类的认知。而接口主要用于实现多态,对于这种具有明显继承层次关系的场景,抽象类更为合适。