Java中类可通过implements同时实现多个接口以实现多重继承语义;必须实现所有接口的抽象方法,同名默认方法需显式覆写,接口间可用extends多继承。

Java中一个类可以通过implements关键字同时实现多个接口,这是实现多重继承语义的常用方式——接口只定义行为契约,不提供具体实现,因此允许多实现。
多实现的基本写法
类在声明时用implements后跟多个接口名,用英文逗号分隔:
public class Dog implements Animal, Runnable, Swimmable {
// 必须实现所有接口中声明的抽象方法
@Override
public void move() { /* 实现Animal的move */ }
<pre class="brush:php;toolbar:false;">@Override
public void run() { /* 实现Runnable的run */ }
@Override
public void swim() { /* 实现Swimmable的swim */ }}
必须实现全部抽象方法
只要类声明了实现某个接口,就必须提供该接口中所有public abstract方法的具体实现(除非该类是抽象类):
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 若接口中有默认方法(
default),可直接继承使用,无需重写 - 若多个接口有同名同签名的默认方法,子类必须显式覆写该方法,否则编译报错
- 若接口中有静态方法,不能被实现,只能通过接口名调用
接口之间也可以多继承
接口本身可用extends继承多个接口,形成更通用的行为组合:
interface Mammal extends Animal, WarmBlooded {
// 可以添加新方法,也可复用父接口方法
}这样其他类实现Mammal时,就自动承担了Animal和WarmBlooded的所有契约。
注意方法冲突与解决
当多个接口定义了相同签名的默认方法时,Java要求子类明确选择或重定义:
- 例如
InterfaceA和InterfaceB都有default void say() { ... } - 实现类必须重写
say(),哪怕只是调用其中一个:InterfaceA.super.say(); - 编译器不会自动合并或优先选择,必须人工干预
不复杂但容易忽略。关键在于理解:接口是“能做什么”的声明,而implements是承诺——你声明支持哪些能力,就要把每一条都落到实处。

















