面试题答案
一键面试代码实现
以下是Python代码示例:
import math
class Shape:
def draw(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def draw(self):
area = math.pi * self.radius ** 2
print(f"圆的面积: {area}")
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def draw(self):
area = self.width * self.height
print(f"矩形的面积: {area}")
多态的优势
- 可维护性:当图形绘制逻辑发生变化时,只需要修改对应子类的
draw
方法,而不会影响到其他类。例如,如果圆的面积计算方法有变动,只需修改Circle
类中的draw
方法,Rectangle
类以及其他可能的子类不受影响。 - 可扩展性:添加新的图形类非常方便,如添加三角形,只需要创建一个新的子类继承自
Shape
类,并重写draw
方法即可,无需修改现有类的代码。这使得系统易于扩展以支持新的图形类型。 - 代码复用:通过继承
Shape
基类,子类可以复用基类的通用属性和方法(在这个例子中虽然基类方法为空,但在更复杂场景下可能存在通用逻辑),提高了代码的复用性。
添加新图形类(如三角形)的修改方式
- 创建新类:创建一个新的类
Triangle
继承自Shape
类。 - 添加属性:为
Triangle
类添加必要的属性,如底(base
)和高(height
)。 - 重写
draw
方法:在Triangle
类中重写draw
方法,实现三角形面积的计算和打印(面积 = 0.5 * base * height)。
以下是添加Triangle
类后的完整代码:
import math
class Shape:
def draw(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def draw(self):
area = math.pi * self.radius ** 2
print(f"圆的面积: {area}")
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def draw(self):
area = self.width * self.height
print(f"矩形的面积: {area}")
class Triangle(Shape):
def __init__(self, base, height):
self.base = base
self.height = height
def draw(self):
area = 0.5 * self.base * self.height
print(f"三角形的面积: {area}")
这样就成功添加了一个新的图形类Triangle
,并且整个系统的其他部分不需要做额外修改。