面试题答案
一键面试子类重写方法的访问修饰符限制
- 访问权限不能比父类更严格:子类重写方法的访问修饰符的访问权限应大于或等于父类被重写方法的访问权限。例如,若父类方法是
protected
,子类重写方法不能是private
,可以是protected
或public
。 - 若父类方法是
public
:子类重写方法必须也是public
。因为public
是最宽松的访问权限,若子类使用更严格的权限(如protected
或private
),会破坏多态性,导致通过父类引用调用子类重写方法时,因访问权限不足而无法调用。 - 若父类方法是
protected
:子类重写方法可以是protected
或public
,但不能是private
。private
访问权限仅在类内部可见,外部无法访问,这与protected
的继承访问特性相悖。 - 若父类方法是
package - private
(默认,无修饰符):子类重写方法可以是package - private
、protected
或public
,不能是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
,访问权限变得更严格,违反了方法重写的访问修饰符规则。