Java接口允许多继承,使用extends关键字并用逗号分隔多个父接口;子接口必须显式重写同名同签名的default方法以解决冲突,抽象方法自然继承,静态方法不被继承。

Java 中接口可以继承多个接口,这是合法且常见的做法,语法上使用 extends 关键字,并用英文逗号分隔多个父接口。
接口多继承的基本写法
一个接口可以通过 extends 同时继承多个接口,不需要 implements。被继承的接口中的所有抽象方法、默认方法、静态方法(不继承实现,但可访问)都会被子接口“继承”——即子接口的实现类必须实现所有未被覆盖的抽象方法。
- 语法格式:interface 子接口名 extends 接口1, 接口2, 接口3 { ... }
- 子接口不会获得父接口中 default 方法的实现,但可以继承并重写它
- 若多个父接口中存在同名同签名的 default 方法,子接口必须显式重写该方法,否则编译报错
多继承时的冲突处理
当多个父接口定义了相同签名的 default 方法,Java 要求子接口必须明确覆盖该方法,否则无法编译。
- 例如:接口 A 和 B 都有
default void show() { ... },接口 C 继承 A 和 B,则 C 必须提供自己的default void show() - 若父接口中只有抽象方法(无 default),则无冲突,子接口自然继承其契约
- 静态方法不会被继承,因此不会引发冲突
实际示例代码
以下是一个清晰的多继承接口示例:
interface Flyable {
void fly();
default void takeOff() { System.out.println("Taking off"); }
}
interface Swimmable {
void swim();
default void takeOff() { System.out.println("Diving in"); } // 与 Flyable 冲突
}
interface Duck extends Flyable, Swimmable {
// 编译器强制要求重写 takeOff()
@Override
default void takeOff() {
System.out.println("Flap wings and dive or fly!");
}
}
// 实现类只需实现 fly() 和 swim()
class MallardDuck implements Duck {
public void fly() { System.out.println("Flying like a duck"); }
public void swim() { System.out.println("Swimming gracefully"); }
}
注意事项与常见误区
- 接口不能继承类(哪怕是抽象类),只能继承其他接口
- 类的 implements 支持多实现(即实现多个接口),但 extends 只能单继承一个类
- 接口多继承 ≠ 类的多继承;Java 不支持类的多继承,但接口之间允许多继承以组合行为契约
- 过度多继承可能降低可读性,建议按语义聚合,比如
Runnable & Serializable & AutoCloseable在 lambda 场景中常见,但应避免无意义堆砌
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











