java通过接口默认方法实现行为层面的多重继承——类可实现多个接口并直接复用其default方法;若同名需显式重写或用interfacename.super调用;接口间也可extends多继承以聚合能力。

Java 不支持类的多重继承,但通过接口配合默认方法,能实现行为层面的“多重继承”效果——一个类可同时实现多个接口,自动获得它们的默认实现,无需重复编码。
接口默认方法是多重继承的关键支撑
Java 8 引入 default 方法,让接口不再只是纯契约,还能提供可复用的行为实现。类在 implements 多个接口时,会直接继承这些默认方法,相当于“组合”了多个行为模块。
- 默认方法用 default 关键字声明,必须有方法体
- 实现类无需重写,默认即可调用;重写则覆盖原有逻辑
- 它解决了接口升级难题:新增 default 方法,旧实现类仍能编译通过
一个类实现多个接口,自动获得默认行为
比如定义两个能力接口:
interface Flyable {
void fly();
default void takeOff() { System.out.println("起飞中…"); }
}
interface Swimmable {
void swim();
default void dive() { System.out.println("开始下潜"); }
}
鸭子类同时实现二者:
class Duck implements Flyable, Swimmable {
public void fly() { System.out.println("扑棱翅膀飞起"); }
public void swim() { System.out.println("用脚蹼划水"); }
}
此时 Duck 实例可直接调用 takeOff() 和 dive(),无需额外实现——这就是默认方法带来的多重行为继承。
多个接口含同名 default 方法时必须显式解决
若两个接口都定义了 default void log(),编译器无法自动选择,必须在实现类或子接口中明确处理:
- 在实现类中重写该方法,并决定逻辑(如合并、选其一)
- 或使用 InterfaceName.super.method() 显式调用某一方的默认实现
- 例如:
@Override public void log() { Flyable.super.log(); }
接口之间也能多继承,进一步组合能力
接口可通过 extends 同时继承多个父接口,把它们的方法契约和默认实现“聚合”为新接口:
interface Amphibious extends Flyable, Swimmable {
@Override
default void log() {
Flyable.super.log();
Swimmable.super.log();
}
}
这样,任何实现 Amphibious 的类,天然具备飞行、游泳及统一日志行为,结构更清晰、复用性更强。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











