当然可以。Java 接口可以继承一个或多个其他的接口,这是 Java 接口的一个核心特性,是实现接口多继承的关键。

通过接口继承,你可以创建一个更通用、更强大的接口,它不仅定义了自己的方法,还继承了父接口的所有方法。
基本语法
接口继承使用 extends 关键字,与类继承的语法相同。
// 父接口 1
interface ParentInterface {
void parentMethod();
}
// 父接口 2
interface AnotherParentInterface {
void anotherParentMethod();
}
// 子接口,继承自 ParentInterface
// 使用 extends 关键字
interface ChildInterface extends ParentInterface {
void childMethod();
}
// 子接口,可以同时继承多个父接口
// 这就是接口的多继承
interface MultiChildInterface extends ParentInterface, AnotherParentInterface {
void multiChildMethod();
}
关键点和规则
-
多继承:与类不同(Java 类只支持单继承),一个接口可以同时继承多个父接口,这是接口多继承的体现。
interface C extends A, B {} // 合法 // class C extends A, B {} // 非法,类不支持多继承 -
方法签名:子接口会自动继承所有父接口中的
public abstract方法,实现类只需要实现最终的子接口,就相当于实现了它所有父接口的方法。
(图片来源网络,侵删)interface A { void a(); } interface B { void b(); } interface C extends A, B { void c(); } // 实现 C 接口的类,必须提供 a(), b(), c() 的实现 class MyClass implements C { @Override public void a() { /* ... */ } @Override public void b() { /* ... */ } @Override public void c() { /* ... */ } } -
常量继承:子接口同样会继承父接口中所有的
public static final常量。 -
默认方法的继承:
- 子接口会直接继承父接口中的所有
default方法。 - 子接口可以重写(Override)父接口的
default方法。 - 子接口可以定义自己的
default方法。
- 子接口会直接继承父接口中的所有
-
静态方法的继承:
- 静态方法不能被继承,这意味着子接口不能直接调用父接口的静态方法,也不能重写它们,如果子接口中定义了与父接口同名的静态方法,这会隐藏(hide)父接口的静态方法,而不是重写。
代码示例
下面是一个综合示例,展示了接口继承、默认方法、静态方法和实现类的关系。
// 父接口 1
interface Vehicle {
// 抽象方法
void start();
void stop();
// 默认方法
default void honk() {
System.out.println("Vehicle is honking: Beep Beep!");
}
// 静态方法
static void displayInfo() {
System.out.println("This is a Vehicle interface.");
}
}
// 父接口 2
interface Electric {
// 抽象方法
void charge();
// 默认方法
default void batteryStatus() {
System.out.println("Battery level is good.");
}
}
// 子接口,同时继承了 Vehicle 和 Electric
interface ElectricCar extends Vehicle, Electric {
// 子接口可以定义自己的抽象方法
void enableAutopilot();
// 子接口可以重写父接口的默认方法
@Override
default void honk() {
System.out.println("Electric Car is honking silently: *beep*");
}
}
// 实现最终的子接口
class TeslaModelS implements ElectricCar {
@Override
public void start() {
System.out.println("Tesla started silently.");
}
@Override
public void stop() {
System.out.println("Tesla stopped.");
}
@Override
public void charge() {
System.out.println("Tesla is charging at a Supercharger.");
}
@Override
public void enableAutopilot() {
System.out.println("Autopilot enabled. Driving hands-free.");
}
// 注意:我们不需要再实现 honk() 和 batteryStatus(),
// 因为它们是 default 方法,会被继承。
// 但如果我们想提供特定实现,可以重写,就像上面在接口中定义的那样。
// 这里我们直接使用继承的默认方法。
}
public class Main {
public static void main(String[] args) {
ElectricCar myCar = new TeslaModelS();
myCar.start();
myCar.charge();
myCar.enableAutopilot();
// 调用继承的默认方法
myCar.batteryStatus(); // 来自 Electric 接口
// 调用被重写的默认方法
myCar.honk(); // 来自 ElectricCar 接口的重写
myCar.stop();
// 静态方法不能通过实现类或接口实例调用
// myCar.displayInfo(); // 编译错误
// 必须通过接口名直接调用
Vehicle.displayInfo(); // 输出: This is a Vehicle interface.
Electric.displayInfo(); // 输出: This is a Vehicle interface. (假设 Electric 也有这个方法)
}
}
| 特性 | 描述 |
|---|---|
| 继承关键字 | extends |
| 多继承 | 支持,一个接口可以继承多个父接口。 |
| 抽象方法 | 子接口继承所有父接口的 public abstract 方法,实现类必须实现所有继承来的抽象方法。 |
| 默认方法 | 子接口继承所有父接口的 default 方法,并可以重写它们。 |
| 静态方法 | 不支持继承,子接口不能调用或重写父接口的静态方法,同名静态方法会隐藏父接口的版本。 |
| 常量 | 子接口继承所有父接口的 public static final 常量。 |
Java 接口不仅可以继承接口,而且这是构建灵活、可扩展的 API 设计模式的重要基石,它允许你将相关的行为分组组合,同时避免了类多继承可能带来的“菱形问题”和复杂性。
