traduccion java inheritance visibility override method-overriding

java - traduccion - ¿Por qué puedo anular un método protegido con un método público?



insets javafx (3)

Desde el punto de vista de una clase externa, el método público es solo un método nuevo, no un método de anulación, ya que la clase externa no podría acceder al método protegido de todos modos.

Por otro lado, no se permite reducir la visibilidad porque la clase externa siempre puede usar una referencia del tipo de una superclase para hacer referencia a un objeto de la subclase y llamar al mismo método.

El compilador de Java no se queja cuando anulo un método protected con un método public . ¿Qué está pasando aquí realmente? ¿Está anulando u ocultando el método principal, ya que el método principal tiene menor visibilidad?


La visibilidad solo afecta a la accesibilidad externa. Al ser un método public , cualquier clase externa puede llamarlo.

El nivel de acceso del método de anulación no afecta la visibilidad del método original. Después de anular, con cualquier nivel de acceso, solo se puede acceder al método original llamando a super en la subclase.


Una subclase siempre puede ampliar el modificador de acceso, porque sigue siendo una sustitución válida para la superclase. De la especificación de Java sobre los requisitos para anular y ocultar :

El modificador de acceso (§6.6) de un método de anulación u ocultación debe proporcionar al menos tanto acceso como el método anulado u oculto, de la siguiente manera:

  • Si el método anulado u oculto es público, entonces el método de anulación u ocultación debe ser público; de lo contrario, se produce un error en tiempo de compilación.
  • Si el método anulado u oculto está protegido, entonces el método de anulación u ocultación debe ser protegido o público; de lo contrario, se produce un error en tiempo de compilación.
  • Si el método anulado u oculto tiene acceso predeterminado (paquete), entonces el método de anulación u ocultación no debe ser privado; de lo contrario, se produce un error en tiempo de compilación.