Java中一个类可同时实现多个接口,用逗号分隔;接口间可多继承,也用逗号分隔;若多个接口含同签名default方法,实现类必须显式重写,否则编译报错。

Java 中一个类可以同时实现多个接口,这是完全合法且常用的做法;但要注意“多实现”仅适用于类对接口的 implements,不适用于类的继承(extends)——Java 不支持多继承。
一个类如何同时实现多个接口
使用逗号分隔多个接口名即可。编译器会强制要求该类实现所有接口中声明的抽象方法(除非是默认方法或静态方法)。
public class Dog implements Animal, Pet, Runnable {
@Override
public void eat() { /* 来自 Animal */ }
@Override
public void play() { /* 来自 Pet */ }
@Override
public void run() { /* 来自 Runnable */ }}
- 接口之间用英文逗号
,分隔,不能用&或and - 若多个接口中存在同名同签名的默认方法(
default),编译会报错:class Dog inherits unrelated defaults for run() from types Runnable and Pet,此时必须在类中显式重写该方法 - 若某接口方法被另一个接口以
default提供实现,而本类未重写,就直接继承那个默认实现
接口之间能否互相 extends 多个接口
可以。一个接口可通过 extends 关键字继承多个父接口,语义上是“合并契约”,子接口需兼容所有父接口的方法声明。
小邮包-包月订购包年服务网,该程序由好买卖商城开发,程序采用PHP+MYSQL架设,程序商业模式为目前最为火爆的包月订制包年服务模式,这种包年订购在国外网站已经热火很多年了,并且已经发展到一定规模,像英国的男士用品网站BlackSocks,一年的袜子购买量更是达到了1000万双。功能:1、实现多产品上线,2、不用注册也可以直接下单购买,3、集成目前主流支付接口,4、下单发货均有邮件提醒。
立即学习“Java免费学习笔记(深入)”;
public interface SmartDevice extends PowerControl, Networked, Usable {
// 自己可再加方法
void updateFirmware();
}- 多个父接口也用逗号分隔,和类的
implements语法一致 - 若父接口中有冲突的默认方法(比如两个父接口都定义了同名
default void start()),子接口本身不解决冲突;真正实现该子接口的类才需要处理 - 接口不能
extends类,也不能implements任何东西——只有类能implements接口
当多个接口有相同方法签名时会发生什么
分三种情况:都是抽象方法、含默认方法、含静态方法——行为完全不同。
- 如果全是抽象方法(无
default),没问题,只需在实现类中提供一次具体实现 - 如果至少一个接口提供了
default方法,而其他接口也有同签名抽象方法,那默认方法会被“覆盖”——实现类仍必须提供实现(否则编译失败),因为抽象方法优先级高于默认方法 - 如果两个接口都定义了同签名的
default方法,实现类不重写就会编译报错;必须显式写出@Override方法体,哪怕只是调用其中一个:ParentA.super.method() - 静态方法不会被继承或覆盖,所以即使签名相同,也互不影响;调用时必须通过接口名限定:
InterfaceA.staticMethod()
真正容易出问题的不是“能不能多实现”,而是默认方法冲突时忘记重写,或者误以为接口继承会自动合并默认行为。实际编码中,建议尽量避免在不同业务接口里定义相同名称的默认方法,尤其当它们可能被同一类实现时。









