为什么我可以使用公共方法覆盖受保护的方法?

Mon*_*eur 21 java inheritance overriding visibility

当我用protected方法覆盖方法时,Java编译器不会抱怨public.这里到底发生了什么?它是否覆盖或隐藏父方法,因为父方法的可见性较低?

Har*_*ezz 34

子类总是可以加宽访问修饰符,因为它仍然是超类的有效替换.从关于覆盖和隐藏要求的Java规范:

覆盖或隐藏方法的访问修饰符(第6.6节)必须至少提供与重写或隐藏方法一样多的访问权限,如下所示:

  • 如果重写或隐藏方法是公共的,则覆盖或隐藏方法必须是公共的; 否则,发生编译时错误.
  • 如果被覆盖或隐藏的方法受到保护,则覆盖或隐藏方法必须受到保护或公开; 否则,发生编译时错误.
  • 如果重写或隐藏方法具有默认(包)访问权限,则覆盖或隐藏方法不得为私有方法; 否则,发生编译时错误.