java接口命名须首字母大写、用大驼峰法(如userservice),禁用i或interface前缀;定义用interface关键字,方法默认public abstract、字段默认public static final,禁止普通变量;default方法限无状态通用逻辑,static方法不可重写;多接口实现需方法签名一致,冲突应通过语义拆分重构。

Java 中接口的定义规范,核心是“只声明契约,不参与实现”。它不是模板类,也不是工具类,而是一份公开、稳定、可复用的行为约定。
接口命名与结构规范
接口名必须首字母大写,采用驼峰命名法(如 UserService、PaymentStrategy),避免使用 I 或 Interface 前缀(如 IUserService 是冗余且非 Java 习惯)。定义使用 interface 关键字,不能加 class 或 abstract:
- ✅ 正确:
public interface Logger { void log(String msg); } - ❌ 错误:
public abstract interface Logger(abstract多余) - ❌ 错误:
public class Logger implements ...(接口不能用class声明)
成员定义的隐式修饰规则
接口中所有方法默认是 public abstract,所有字段默认是 public static final。显式写出这些修饰符不仅没必要,还违背规范:
- 方法不写修饰符:
void save(User u);✅(自动视为public abstract) - 不写
public abstract:public abstract void save(...)❌(冗余,IDE 通常会警告) - 常量全大写下划线:
int MAX_RETRY = 3;✅,String DEFAULT_ENCODING = "UTF-8";✅ - 禁止定义普通变量:
private int count;❌(编译报错,接口不能有实例状态)
default 和 static 方法的使用边界
JDK 8 引入的 default 和 static 方法是为向后兼容服务的,不是用来替代抽象类的:
-
default方法应提供通用、无状态、不依赖实现类私有成员的逻辑,比如集合工具行为:default boolean isEmpty() { return size() == 0; } -
static方法属于接口本身,不可被重写,适合工具型操作:static Logger of(String name) { return new ConsoleLogger(name); } - 避免在
default方法里访问this的非公开字段,或调用未暴露的私有辅助方法——它无法做到,也不该尝试 - 不建议用
default实现业务主流程;复杂逻辑、上下文依赖、缓存或配置读取,应交给实现类
多接口实现与冲突规避
一个类可 implements 多个接口,但需注意方法签名一致性:
- 若两个接口都有
void start();,实现一次即可满足两者 ✅ - 若
A.start()返回void,B.start()返回boolean,编译直接失败 ❌(JVM 认为契约矛盾) - 解决冲突的正解不是强行统一返回值,而是重构接口:把语义不同的行为拆成不同方法名,如
launch()与validateAndStart() - 接口之间可用
extends继承多个父接口:interface AdminService extends UserService, Loggable
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











