面试题答案
一键面试1. 抽象类应定义通用行为或状态
- 对代码结构的影响:它为一组相关的具体类提供了一个共同的基础结构。具体类可以继承抽象类,从而复用其定义的方法和属性,避免代码重复,使代码结构更加清晰和紧凑。例如,在图形绘制系统中,抽象类
Shape
可以定义通用的属性如颜色、位置,以及通用的方法如draw
,具体的Circle
、Rectangle
等类继承自Shape
,代码结构呈现树形分层,易于理解。 - 对可维护性的影响:当需要修改通用行为或状态时,只需在抽象类中进行修改,所有继承自该抽象类的具体类都会自动应用这些修改,大大降低了维护成本。比如要统一修改图形的颜色设置方式,只需在
Shape
抽象类中修改相关代码。
2. 抽象方法应由具体子类实现
- 对代码结构的影响:抽象类通过定义抽象方法,为具体子类提供了一种契约。具体子类必须实现这些抽象方法,这就明确了不同子类在功能上的差异点,使得代码结构上各个子类在遵循共同契约的基础上展现出各自的特性。例如,
Shape
抽象类中的draw
方法是抽象的,Circle
类和Rectangle
类根据自身特点实现该方法,使得整个图形绘制体系结构清晰,各子类分工明确。 - 对可维护性的影响:如果需求发生变化,需要修改某个具体子类的特定行为,只需修改该子类对抽象方法的实现,而不会影响其他子类。比如要改变圆形的绘制方式,只需要修改
Circle
类中draw
方法的实现,不会干扰到Rectangle
类等其他子类。
3. 抽象类不应该被实例化
- 对代码结构的影响:强调了抽象类存在的意义在于为具体类提供抽象的基础和模板,而不是作为独立的对象存在。这使得代码结构更加符合逻辑,避免了创建无意义的抽象类实例,保证了继承体系的合理性。例如,
Shape
抽象类不应被实例化,只有Circle
、Rectangle
等具体子类实例才有实际意义,使得代码结构更加严谨。 - 对可维护性的影响:防止错误地创建抽象类实例,减少了潜在的运行时错误,提高了代码的稳定性和可维护性。因为如果允许抽象类实例化,可能会在使用过程中由于抽象类部分功能未实现而导致程序出错,禁止实例化则避免了这种情况。