接口
书接上文,虽然 Java 不支持类的多重继承,但它通过接口来弥补这一限制。Java 支持多接口继承,即一个类可以实现多个接口,从而获得多态性。接口是一种契约,规定了类必须实现的方法,但不包含具体实现。
示例代码
interface A {
void methodA();
}
interface B {
void methodB();
}
class C implements A, B {
public void methodA() {
System.out.println("我是接口 A");
}
public void methodB() {
System.out.println("我是接口 B");
}
}
在上面的例子中,类 C
实现了两个接口 A
和 B
,从而获得了两者的功能。这种方式不仅避免了多重继承中的冲突,还保持了代码的灵活性和扩展性。
默认方法
从 Java 8 开始,接口引入了默认方法(default methods),这进一步增强了接口的灵活性。接口可以提供方法的默认实现,从而类似于某种程度的“多重继承”。
但是这里是不是就会有人问:诶,那不就又出现了多继承的菱形继承问题吗?
所以在Java中,强制规定,如果有多个接口内有相同的默认方法,子类必须要重写这个方法
示例
interface A {
default void methodA() {
System.out.println("我是接口 A");
}
}
interface B {
default void methodB() {
System.out.println("我是接口 B");
}
}
class C implements A, B {
// 重写接口的默认方法
}
通过接口中的默认方法,Java 提供了类似于多重继承的一种机制,允许类从多个接口中继承默认行为,并且如果存在冲突,子类可以通过重写来明确解决。
总结
Java 不支持多重继承的主要原因在于避免了多重继承带来的二义性问题和复杂性。通过使用接口和默认方法,Java 提供了一种灵活的方式来实现多态和代码复用,同时保持了代码的清晰性和可维护性。