java接口用interface定义,方法默认public abstract、字段默认public static final;jdk8+支持default和static方法;类通过implements实现接口,非抽象类必须重写所有abstract方法,接口可多继承但不能extends类。

Java 接口中不能有构造方法、不能实例化,实现类必须重写所有抽象方法(除非是 default 或 static 方法),这是最常被误踩的起点。
接口定义:用 interface 关键字,方法默认是 public abstract
接口不是类,它只描述“能做什么”,不关心“怎么做”。定义时注意:
-
interface中的方法默认是public abstract,即使不写修饰符,也不能加private、protected或final - 字段默认是
public static final,即常量,必须初始化(如int MAX_SIZE = 100;) - JDK 8+ 支持
default方法(可被实现类直接继承,无需重写)和static方法(只能通过接口名调用,如MyInterface.doStatic()) - 不能包含实例变量、构造器、普通静态代码块
实现接口:用 implements,且必须实现全部 abstract 方法
一个类可以 implements 多个接口,但只能 extends 一个类。关键点:
- 若类是非抽象类,则必须重写接口中所有
abstract方法(包括从父接口继承来的) - 重写时方法签名必须完全一致(返回类型协变允许,如父接口返回
Object,实现类可返回String) - 如果不想实现全部方法,类必须声明为
abstract—— 这是编译器强制要求,不是可选项 - 多个接口含同名同参的
default方法时,实现类必须显式覆写该方法,否则编译失败
接口间的继承:用 extends,支持多继承
接口可以继承其他接口,语法类似类继承,但支持多继承(用逗号分隔):
立即学习“Java免费学习笔记(深入)”;
interface A { void m1(); }
interface B { void m2(); }
interface C extends A, B { void m3(); }
此时实现 C 的类必须提供 m1()、m2()、m3() 的实现。注意:
- 子接口会继承父接口的所有
abstract、default和static成员 - 若两个父接口有冲突的
default方法(同签名),子接口必须用default覆盖掉其中一个,否则无法编译 - 接口不能
extends类,也不能implements其他东西
真正容易出问题的地方不在语法,而在设计意图混淆:把接口当工具类用(塞一堆 static 方法)、在 default 方法里写复杂逻辑导致实现类难以替换、或者让接口承担状态职责(比如加 setXxx() 和 getXxx() 却没有明确契约语义)。接口的核心价值是解耦与契约声明,不是代码复用的捷径。









