Java权限修饰符约束子类重写:public只能被public重写;protected可升为public但不可降级;包私有方法仅同包子类可重写且限default或public;private方法不继承、不参与重写。

Java 中权限修饰符直接约束子类能否以及如何重写父类方法。核心原则是:重写后的方法访问权限不能比父类更严格,否则编译失败。
public 方法只能被 public 重写
父类中声明为 public 的方法,子类重写时必须也用 public。不能降级为 protected、包私有(default)或 private。
原因:外部代码可能通过父类引用调用该方法,若子类擅自缩小可见性,多态调用会在运行时因权限不足而中断——编译器提前拦截,报错 Cannot reduce the visibility。
protected 方法可升级为 public,但不可降级
父类用 protected,子类重写可用 protected 或 public,但不能用包私有或 private。
立即学习“Java免费学习笔记(深入)”;
例如:父类在包 A 中定义 protected void save(),子类在包 B 中继承并重写,就必须用 public(因不同包下 protected 不可见),否则无法编译通过。
包私有(default)方法仅限同包子类重写
父类方法无任何修饰符(即包私有),子类只有与父类在同一包内才能重写它,且重写方法只能是 default 或 public。
跨包的子类根本看不到这个方法,自然无法重写;即使写了同名方法,也只是独立声明,不构成重写。
private 方法不参与重写机制
private 方法不会被继承,子类中出现同名同参方法,只是新定义一个方法,与父类无关。
它不属于继承链的一部分,因此谈不上“限制重写”——而是从源头上排除了重写的可能。
不复杂但容易忽略:权限不是可选风格,而是编译器强制执行的安全契约。搭配 @Override 注解,能第一时间暴露权限误配、签名错误等隐患。


















