Java 中“子类覆盖父类方法时,权限必须大于等于父类”

张开发
2026/4/17 12:49:18 15 分钟阅读

分享文章

Java 中“子类覆盖父类方法时,权限必须大于等于父类”
Java 中“子类覆盖父类方法时权限必须大于等于父类”是基于多态性和面向对象“替换原则”的规定。其核心目的是为了确保当父类引用实际指向子类对象时原本父类允许调用的代码不会被子类限制的权限堵死保证程序稳定性。权限由高到低public protected default (包权限) private。1. 为什么必须大于等于多态要求Java 允许使用父类引用指向子类对象例如Animal a new Dog();。一致性如果外部程序如另一个包可以调用 Animal 的 eat()声明为 public那么它也应该能调用 Dog 实例的 eat()。违规后果如果子类 Dog 的 eat() 降低为 private外部代码依然按照 Animal 的类型使用就会导致“编译通过但运行由于权限不足而崩溃”。2. 具体场景举例正确场景满足要求父类方法protected void method() {}子类方法public void method() {} (public protected允许)错误场景编译失败父类方法protected void method() {}子类方法void method() {} (default protected编译器报错)3. 补充说明Private 限制父类中的 private 方法无法被重写因为子类根本看不到该方法。编译报错如果子类试图将重写方法声明为更严格的权限Java 编译器直接报错无法通过编译。总结此规则保证了子类在替换父类时绝不会“缩减”父类向外部暴露的能力。

更多文章