implements必须写在class声明后、extends之后;一个类可实现多个接口,接口名用英文逗号分隔;实现接口须重写所有public abstract方法,default和static方法除外;接口方法默认public,实现类方法访问权限不可降低。

implements必须写在class声明后、extends之后
Java中一个类只能继承一个父类,但可以实现多个接口,implements关键字的位置有严格语法要求:它必须紧跟在class声明之后,且在extends(如果存在)的后面。顺序写错会直接编译失败。
- 正确写法:
class Dog extends Animal implements Runnable, Serializable - 错误写法:
class Dog implements Runnable extends Animal→ 编译报错Syntax error on token "extends", delete this token - 如果没继承父类,
implements直接跟在class后:class Calculator implements MathOps, Loggable
实现接口必须重写全部抽象方法
接口里的public abstract方法(Java 8 之前只有这类方法)在实现类中必须提供具体实现,否则该类必须声明为abstract。Java 8+ 接口可含default和static方法,这两类不强制重写。
- 接口定义:
interface Payment { void process(); // 必须实现 default void log() { // 可不重写 System.out.println("logged"); } static void validate() { // 不能被重写,只能通过接口名调用 System.out.println("validating..."); } } - 实现类若只写
class CreditCardPayment implements Payment,却不提供process()方法,编译报错:CreditCardPayment is not abstract and does not override abstract method process() in Payment - 注意:即使接口方法没显式写
public abstract,Java也会自动补全——所以省略修饰符不等于可以不实现
接口之间用逗号分隔,不能用and或&&
一个类实现多个接口时,接口名之间只能用英文逗号,分隔,不能用逻辑运算符或中文顿号。这是常见拼写错误点。
- 正确:
class ServiceHandler implements Runnable, Closeable, AutoCloseable - 错误:
class ServiceHandler implements Runnable && Closeable→ 编译错误illegal start of type - 错误:
class ServiceHandler implements Runnable、Closeable(中文顿号)→ 编译错误illegal character: '\u3001' - 接口名顺序无关语义,但建议按常用程度或依赖关系排列,便于阅读
实现类可以同时继承父类并实现接口,但父类方法不能替代接口契约
即使父类已定义了与接口同名同签名的方法,只要该方法不是public,或访问权限不够(如父类是protected),实现类仍需显式重写以满足接口的public要求。
立即学习“Java免费学习笔记(深入)”;
- 接口要求:
void start()→ 隐含public abstract void start() - 父类中:
protected void start() { ... }→ 不满足接口契约,实现类必须新增public void start() - 父类中:
public void start() { ... }→ 满足,可不重写(但建议加@Override注解明确意图) - 接口方法默认是
public,实现类中对应方法不能降级为protected或private,否则编译报错:attempting to assign weaker access privileges
default方法)、以及父类已有方法是否真正“兑现”了接口承诺——这些地方不看字节码或不跑编译器,很容易凭直觉写错。










