面试题答案
一键面试1. 定义图形接口
public interface Shape {
void draw();
}
2. 实现圆形类
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
3. 实现矩形类
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
4. 实现三角形类
public class Triangle implements Shape {
@Override
public void draw() {
System.out.println("绘制三角形");
}
}
5. 使用多态
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
Shape rectangle = new Rectangle();
Shape triangle = new Triangle();
circle.draw();
rectangle.draw();
triangle.draw();
Shape[] shapes = {circle, rectangle, triangle};
for (Shape shape : shapes) {
shape.draw();
}
}
}
多态提高代码可维护性的阐述
- 易于扩展:当需要新增一种图形,比如菱形,只需要创建一个实现
Shape
接口的Diamond
类并实现draw
方法,无需修改现有代码。例如:
public class Diamond implements Shape {
@Override
public void draw() {
System.out.println("绘制菱形");
}
}
在使用Shape
数组或集合的地方,直接添加Diamond
对象即可,如Shape[] shapes = {circle, rectangle, triangle, new Diamond()};
。
2. 降低耦合:各个图形类只关注自身的绘制逻辑,依赖于统一的Shape
接口,而不是彼此之间直接关联。如果某个图形类的绘制逻辑发生改变,只需要修改该类内部代码,不会影响其他图形类和使用Shape
接口的地方。例如Circle
类修改绘制算法,不影响Rectangle
和Triangle
类。
3. 代码复用:在操作图形的地方,如main
方法中使用Shape
数组或集合来统一处理不同图形,复用了遍历和调用draw
方法的代码,提高了代码复用性,减少了重复代码。