MST

星途 面试题库

面试题:Java多态中方法重写的访问修饰符边界情况

在Java多态的方法重写中,子类重写方法的访问修饰符有哪些限制?请举例说明如果违反这些限制会出现什么情况。
20.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

子类重写方法的访问修饰符限制

  1. 访问权限不能比父类更严格:子类重写方法的访问修饰符的访问权限应大于或等于父类被重写方法的访问权限。例如,若父类方法是 protected,子类重写方法不能是 private,可以是 protectedpublic
  2. 若父类方法是 public:子类重写方法必须也是 public。因为 public 是最宽松的访问权限,若子类使用更严格的权限(如 protectedprivate),会破坏多态性,导致通过父类引用调用子类重写方法时,因访问权限不足而无法调用。
  3. 若父类方法是 protected:子类重写方法可以是 protectedpublic,但不能是 privateprivate 访问权限仅在类内部可见,外部无法访问,这与 protected 的继承访问特性相悖。
  4. 若父类方法是 package - private(默认,无修饰符):子类重写方法可以是 package - privateprotectedpublic,不能是 private

违反限制的情况举例

class Parent {
    protected void parentMethod() {
        System.out.println("Parent's method");
    }
}

class Child extends Parent {
    // 错误,访问权限比父类更严格
    private void parentMethod() {
        System.out.println("Child's method"); 
    }
}

上述代码在编译时会报错,提示 Child.parentMethod() has more restrictive access than Parent.parentMethod(),因为子类将父类 protected 方法重写为 private,访问权限变得更严格,违反了方法重写的访问修饰符规则。