java接口方法默认为public,因其设计目标是定义对外公开的行为契约,所有实现类(含跨包)必须能访问并实现;编译器自动添加public abstract,显式书写public属冗余,private/protected/default均编译报错。

Java 接口里的方法默认是 public 访问权限。
为什么是 public?
接口的设计目标是定义对外公开的行为契约,所有实现类都必须能访问并实现这些方法。因此:
- 即使不写
public关键字,编译器也会自动加上public abstract - 显式写
public是合法的,但属于冗余写法 - 写
private、protected或不加修饰符(即 default 包权限)都会编译报错
默认方法(default method)也一样
Java 8 引入的默认方法同样遵循这一规则:
- 必须用
default修饰,且隐式为public - 不能写
private或protected,也不能省略public后改成包权限 - 例如:
default void log() { ... }等价于public default void log() { ... }
和抽象类的区别要留意
抽象类中的抽象方法可以是 protected 或包权限,但接口不行——这是由接口的语义决定的:
- 接口方法天然面向“所有可能的实现者”,包括不同包下的类
- 抽象类更偏向“继承体系内部约定”,允许更细粒度的访问控制
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











