Java接口是行为规范的集合,使用interface定义,方法默认public abstract,字段默认public static final;从Java 8起支持default和static方法;类通过implements实现一个或多个接口,必须重写所有抽象方法(除非为抽象类);接口支持多继承,强调“能做什么”,用于解耦、定义契约、标记类型或支持Lambda,与抽象类相比更侧重能力而非共性。

Java接口是一组抽象方法的集合,用于定义类必须遵循的行为规范。它不提供具体实现,只声明“能做什么”,由实现类负责“怎么做”。接口是Java实现抽象和多态的重要机制。
接口的定义方式
使用 interface 关键字定义接口,其中的方法默认是 public abstract,字段默认是 public static final(即常量)。从Java 8起,接口可包含默认方法(default)和静态方法(static)。
示例:
interface Animal {
String LEGS = "4"; // 隐式 public static final
void makeSound(); // 隐式 public abstract
default void sleep() { System.out.println("Sleeping..."); }
static void breathe() { System.out.println("Breathing..."); }
}
类实现接口的语法
用 implements 关键字让类实现一个或多个接口。实现类必须重写接口中所有抽象方法(除非该类是抽象类)。
立即学习“Java免费学习笔记(深入)”;
- 一个类可实现多个接口,用逗号分隔
- 接口之间可用 extends 继承,支持多继承
- 实现类若未实现全部抽象方法,自身必须声明为 abstract
示例:
class Dog implements Animal, Runnable {
public void makeSound() { System.out.println("Woof!"); }
public void run() { System.out.println("Running..."); }
}
接口与抽象类的区别要点
接口更侧重“能力契约”,抽象类更侧重“共性模板”。
- 接口不能有构造器、实例字段、普通方法;抽象类可以
- 接口中的方法默认无实现(除 default/static);抽象类可有具体方法
- 类只能单继承抽象类,但可多实现接口
- 接口适合定义行为标准(如 Comparable、Serializable),抽象类适合抽取公共逻辑
实际开发中的常见用法
接口广泛用于解耦、测试和扩展设计。
- 定义服务契约:如 UserService 接口,便于替换不同实现(内存版/数据库版/远程版)
- 配合依赖注入:框架通过接口类型注入对象,不依赖具体类
- 标记接口:如 Serializable,无方法,仅作类型标识
- 函数式接口:仅含一个抽象方法(如 Runnable),支持Lambda表达式
基本上就这些。接口本身不复杂,但用好需要理解它在设计中的定位——不是为了写代码,而是为了划清责任边界。











