implements是java中声明类实现接口的关键字,表示契约关系而非继承,类必须实现接口中所有public abstract方法,否则编译报错;语法为class a implements i1, i2,与extends共用时extends须在前;default方法可直接使用或显式重写,static方法只能通过接口名调用。

implements 是 Java 中声明类对接口“承诺实现”的关键字,不是继承,而是契约关系——你写了它,就得把接口里所有抽象方法都写出来,否则编译直接报错。
怎么写:基本语法和多个接口
在类声明时紧接 class 名后使用,接口名之间用英文逗号分隔,不能用 and、& 或顿号:
-
单接口:
class Dog implements Animal { ... } -
多接口:
class Duck implements Flyable, Swimmable, Quackable { ... } -
和继承混用时,extends 必须在前:
class ElectricCar extends Vehicle implements Drivable, Chargeable { ... }
必须实现哪些方法?
只对 public abstract 方法 强制要求实现(Java 接口中方法默认就是 public abstract):
- 漏写任意一个抽象方法 → 编译失败,提示 “must either be declared abstract or implement abstract method…”
- 方法签名必须完全一致:方法名、参数类型顺序、返回类型,连大小写都不能错
- 建议统一加
@Override注解,让编译器帮你校验是否真覆盖了接口方法
default 和 static 方法怎么处理?
它们不参与“强制实现”义务,但有特殊规则:
- default 方法:可直接用,不用重写;但如果两个接口都有同签名的 default 方法,你必须在类中显式重写,否则编译报错
-
static 方法:根本不能被 implements,也不可重写,只能通过
InterfaceName.method()调用
常见踩坑点
这些错误高频出现,且编译提示容易让人困惑:
- 把
void run()写成int run()→ 返回类型不匹配,不算实现 - 参数写成
run(String... args)却接口定义是run(String arg)→ 参数列表不同,不算实现 - 接口方法是
public void move(),实现时加了private或漏写public→ 访问权限不能比接口更严格 - 多个接口含同名 default 方法却没重写 → 编译器不会猜你要用哪个,必须人工明确











