接口中默认方法的访问权限必须为public,重写时不可降低;Java规定接口所有方法(含默认、静态、抽象方法)均隐式为public,禁止使用protected、private或包私有修饰。

不可以。接口中默认方法的访问权限在实现类中重写时,不能降低,必须保持为 public。
默认方法本身只能是 public
Java 规定:接口中的所有方法(包括抽象方法、默认方法、静态方法)都隐式具有 public 访问权限,且不允许显式使用 protected、private 或包私有(即不写修饰符)来声明。
- 即使你省略
public关键字,编译器也视其为public default void method(); - protected default void method(),会直接编译报错;
- protected 或不加修饰符(即包私有),就等于试图用更窄的权限去实现一个
public方法,违反 Java 的重写规则。
重写时权限必须持平或更宽
Java 编译器强制要求:子类(含实现类)重写父类或接口中已声明的方法时,访问权限不能比原方法更严格。
- public;
- public,不能用
protected、包私有或private; - Cannot reduce the visibility of the inherited method from XXX。
为什么不能降权?核心是契约一致性
接口定义了一组对外公开的行为契约。默认方法作为接口能力的一部分,意味着“任何实现该接口的对象,都应能被外部代码以 public 方式调用这个方法”。
- protected,跨包调用就会失败;
常见误区与实操提醒
- @Override 方法通常默认加
public,但手动删掉后容易遗漏; - public);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











