使用抽象类设计
- 抽象图形类:
abstract class Shape {
abstract void draw();
}
- 圆形类:
class Circle extends Shape {
@Override
void draw() {
System.out.println("绘制圆形");
}
}
- 矩形类:
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("绘制矩形");
}
}
使用接口设计
- 图形接口:
interface Shape {
void draw();
}
- 圆形类:
class Circle implements Shape {
@Override
public void draw() {
System.out.println("绘制圆形");
}
}
- 矩形类:
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
}
抽象类实现多态性的优势和适用场景
- 优势:
- 可以包含部分实现代码,子类可以复用这些代码,减少重复代码。例如抽象类中可以定义一些通用的图形属性获取方法。
- 抽象类可以有构造函数,用于初始化一些通用的属性。
- 适用场景:当多个子类有很多共同的行为和状态,并且有部分通用实现时,使用抽象类更合适。比如所有图形都有颜色属性,抽象类可以提供设置和获取颜色的方法。
接口实现多态性的优势和适用场景
- 优势:
- 一个类可以实现多个接口,实现更灵活的多态。例如一个图形类既可以实现绘制接口,还可以实现可移动接口。
- 接口更强调行为的定义,不包含任何实现代码,实现类更加专注于自身的实现。
- 适用场景:当需要实现多种不同维度的行为组合,或者希望实现类更加灵活地定义自己的行为时,使用接口更合适。比如一些图形需要有动画效果,一些不需要,就可以通过实现动画接口来区分。