接口体现类似多继承特性的方式
- 一个类可以实现多个接口,从而获得多个接口中定义的方法签名。接口中只有抽象方法(JDK 8 开始可包含默认方法和静态方法),实现类必须实现接口中的抽象方法,以此达到类似从多个“父类”获取功能的效果。例如:
interface Interface1 {
void method1();
}
interface Interface2 {
void method2();
}
class MyClass implements Interface1, Interface2 {
@Override
public void method1() {
// 实现方法
}
@Override
public void method2() {
// 实现方法
}
}
抽象类体现类似多继承特性的方式
- 一个类只能继承一个抽象类,抽象类中可以包含抽象方法和具体方法。子类继承抽象类后,若不是抽象子类,则必须实现抽象类中的抽象方法,从而获得抽象类的部分功能。例如:
abstract class AbstractClass {
public void commonMethod() {
// 具体方法实现
}
abstract void abstractMethod();
}
class SubClass extends AbstractClass {
@Override
void abstractMethod() {
// 实现抽象方法
}
}
接口实现类似多继承的优缺点
- 优点:
- 灵活性高:一个类可以实现多个接口,使类具有更丰富的行为,能够从多个不同的“父类”获取功能,适合解决复杂的业务需求。
- 低耦合:接口只定义方法签名,实现类与接口之间耦合度低,便于系统的维护和扩展。不同的实现类可以根据自身需求灵活实现接口方法。
- 利于代码复用:多个不相关的类可以实现同一个接口,实现接口的代码复用。
- 缺点:
- 缺乏代码共享:接口中不能有实例变量(除了静态常量),且方法默认是抽象的(JDK 8 后有默认方法等),无法为实现类提供通用的实现代码,导致实现类可能需要编写重复代码。
- 增加复杂度:如果实现多个接口,且接口之间存在方法签名相同但语义不同的情况,实现类可能会面临困惑,增加了代码实现和维护的复杂度。
抽象类实现类似多继承的优缺点
- 优点:
- 代码共享:抽象类可以包含具体方法和实例变量,子类可以直接继承这些方法和变量,实现代码的共享,减少代码冗余。
- 定义通用行为:适用于定义一组相关类的通用行为和属性,便于进行统一的管理和扩展。
- 缺点:
- 单继承限制:Java 中类只能继承一个抽象类,无法像接口那样从多个“父类”获取功能,在某些复杂业务场景下灵活性不足。
- 高耦合:子类与抽象类之间耦合度较高,抽象类的修改可能会影响到所有子类,不利于系统的维护和扩展。