Java接口定义行为规范,只声明public abstract方法和public static final常量,支持default、static(Java 8起)及private(Java 9起)方法;类用implements实现接口并须实现其抽象方法,接口可extends多继承。

Java 中接口(interface)用于定义行为规范,不包含具体实现,只声明方法签名(默认是 public abstract),还可包含常量(默认 public static final)和默认方法(default)、静态方法(static)。类通过 implements 关键字实现接口,并必须提供所有抽象方法的具体实现(除非该类是抽象类)。
接口的定义方式
使用 interface 关键字声明接口,命名习惯为大驼峰,通常以 able、ible 或 er 结尾(如 Runnable、Comparable):
- 接口中所有方法默认是
public abstract,可省略修饰符 - 所有字段默认是
public static final,即常量,必须初始化 - 从 Java 8 开始支持
default方法(有方法体,子类可不重写)和static方法(直接用接口名调用) - 从 Java 9 开始支持
private方法(用于复用 default 方法中的逻辑)
示例:
interface Flyable {
int MAX_HEIGHT = 10000; // public static final
void fly(); // public abstract
void land();
default void takeOff() {
System.out.println("Taking off...");
}
static void checkWind() {
System.out.println("Wind is fine.");
}
}
类实现接口:implements 的用法
一个类使用 implements 实现一个或多个接口,多个接口用逗号分隔。实现类必须覆盖接口中所有 abstract 方法(除非是抽象类):
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 实现方法时访问权限不能比接口中更严格(必须是
public) - 若实现多个接口,且接口中有同名同参的默认方法,类必须重写该方法,否则编译报错
- 接口不能被实例化,但可以声明接口类型变量,指向其实现类对象(多态)
示例:
class Bird implements Flyable, Comparable<Bird> {
@Override
public void fly() {
System.out.println("Flapping wings to fly");
}
@Override
public void land() {
System.out.println("Landing gently");
}
// 必须实现 Comparable 的 compareTo 方法
@Override
public int compareTo(Bird o) {
return 0;
}
}
// 使用
Flyable b = new Bird();
b.fly(); // OK
b.takeOff(); // 调用 default 方法
Flyable.checkWind(); // 调用 static 方法
接口之间的继承:extends
接口可以继承其他接口,用 extends,支持多继承(逗号分隔):
- 子接口会继承父接口的所有抽象方法和常量
- 子接口可添加新方法,也可重写父接口的
default方法(需用default修饰并提供新实现)
示例:
interface Movable extends Flyable {
void move();
@Override
default void takeOff() {
System.out.println("Moving before takeoff...");
}
}
常见注意事项
实际开发中容易忽略的关键点:
- 接口不能有构造器,也不能有实例字段(只有
static final常量) -
implements是类与接口的关系;extends用于类继承类、接口继承接口,二者不能混用 - 一个类可以
extends一个父类,同时implements多个接口(Java 单继承、多实现) - 接口是实现解耦和面向接口编程的基础,比如
List list = new ArrayList();就是依赖接口而非具体实现

















