Java sigue sus principios de diseño en sí mismo. ¿Qué sucede cuando intentas reducir/reducir el alcance del método público en una subclase? uno obtiene un error. Java niveles modificadores de alcance siguen: < privada (por defecto) < protegida < pública
Toda clase de paquete se supone que es amigable, ya que trabajan juntos. Para que un miembro esté disponible en el paquete, se define en el alcance predeterminado.
Una subclase puede residir fuera del paquete, siguiendo los niveles de alcance otra vez: privado < (predeterminado) < protegido < público - No podemos reducir el alcance. Protegido es un ámbito más amplio que el predeterminado, por lo que Java no contradice sus propias directrices. Por lo tanto, un miembro protegido estará disponible en el alcance predeterminado. También: clase < paquete < Proyecto.
No limite los modificadores a solo la visibilidad, pero la herencia, la estructura también están en funcionamiento al mismo tiempo y añádalos a la imagen también. Si esto fuera cierto: privado < protegido < (predeterminado) < público. entonces todas las subclases tendrían que residir en el mismo paquete, entonces, por qué necesita heredar, puede acceder a todo, ya que el ámbito predeterminado está disponible en el nivel de paquete. El alcance predeterminado habría perdido su valor, al igual que la herencia.
+1 Francamente, también quiero saber por qué. Siempre me pareció una de las decisiones de diseño más estúpidas de Java. – cletus
@cletus: Por lo tanto, lo pienso más, así que más llegué a la conclusión de que "paquete privado" era la idea no bien pensada. Para el "paquete privado" para el trabajo real y ofrecer cualquier tipo de protección real, los paquetes deberían compilarse dentro de una sola unidad de compilación. Y uno no debería ser capaz de mejorarlos más tarde. – Martin