Java中一个类可通过implements关键字同时实现多个接口,用逗号分隔,且必须实现所有public abstract方法;若多个接口有同名同签名default方法,子类须显式重写。

Java中一个类如何同时实现多个接口
Java不支持类的多重继承,但允许一个类实现多个接口——这是解决“需要多种行为能力”问题的标准方案。关键在于用 implements 关键字一次性列出所有接口,用英文逗号分隔。
- 必须实现所有接口中定义的
public abstract方法(JDK 8+ 还需注意default方法冲突) - 如果两个接口有同名同签名的
default方法,编译器会报错,子类必须显式重写该方法 - 接口之间可以多层继承(用
extends),但类只能单继承class,这是硬性限制
示例:
interface Flyable { void fly(); }
interface Swimmable { void swim(); }
class Duck implements Flyable, Swimmable {
public void fly() { /* ... */ }
public void swim() { /* ... */ }
}
接口默认方法冲突时该怎么处理
当多个接口都提供了同名同参数的 default 方法,而实现类没覆盖它,Java 编译器会拒绝编译——这不是运行时错误,是明确的编译期检查。
- 解决方式只有一种:在实现类中用
@Override显式写出该方法体,哪怕只是调用其中一个接口的默认实现(如Flyable.super.fly()) - 不能只写声明不写实现;也不能用
super模糊调用,必须指定具体接口 - 若某接口的
default方法被另一个接口的default方法覆盖(通过extends),则继承链上更近的那个生效
为什么不能用抽象类替代多个接口来组合能力
抽象类本质仍是类,受单继承限制;而接口描述的是“能做什么”,不是“是什么”。强行用抽象类模拟多能力,很快会遇到继承树僵化问题。
- 一个类已继承某个抽象类后,无法再继承第二个——但可以继续
implements任意数量接口 - 抽象类带状态(字段)和构造逻辑,接口只约束行为契约;混用会导致职责不清、测试困难
- 从 JDK 9 开始,接口甚至可以有
private工具方法,进一步降低对抽象类的依赖
实际项目中容易忽略的继承与实现顺序问题
类定义里 extends 和 implements 的位置固定:先 extends,后 implements,且二者不可交换顺序。
本文档主要讲述的是Android JNI开发入门与提高;JNI在Android系统中有着广泛的应用。Android系统底层都是C/C++实现的,上层提供的API都是Java的,Java通过JNI调用底层的实现。比如:Android API多媒体接口MediaPlayer类,其实底层通过JNI调用libmedia库。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“Java免费学习笔记(深入)”;
- 写成
class A implements X extends B是语法错误,编译不过 - 如果父类已实现某接口,子类仍可再
implements同一接口(无害但冗余),也可选择重写其中方法 - 泛型接口的实现要注意类型擦除影响:如
interface Processor被class StringProcessor implements Processor实现后,运行时不再保留String类型信息
接口多实现本身不带来运行时开销,但过度堆砌接口可能让类职责发散,真正难的从来不是语法,而是判断哪些行为该抽成接口、哪些该收进类内部。







