Pregunta

Me doy cuenta de que esta es una pregunta muy básica, pero siempre me ha molestado. Según tengo entendido, si declaras un campo privado en Java, entonces no es visible fuera de esa clase. Si está protegido, está disponible para clases heredadas y cualquier cosa en el mismo paquete (corríjame si alguna de esas definiciones es incorrecta).

¿Esto significa que no es posible declarar un campo que sea accesible solo para clases heredadas y no para otras clases no heredadas en el mismo paquete?

Aprecio que hay formas de evitar esto, pero ¿hay casos en los que desearía tener este tipo de comportamiento?

Obviamente, la pregunta anterior se aplica tanto a los métodos como a los campos.

Muchas gracias.

¿Fue útil?

Solución

Ver: http://java.sun.com/ docs / books / tutorial / java / javaOO / accesscontrol.html
Paquete > Subclases, nunca puede tener un campo visible solo por subclases pero no por clases del mismo paquete.

Otros consejos

Básicamente:

  • privado: accesible solo por la clase.
  • public: accesible por cualquier clase.
  • protegido: accesible por la clase, todas las clases heredadas y las clases del paquete actual (editado) .
  • sin alcance definido: accesible por todas las clases del paquete actual.

más información aquí .

Sí, el acceso protegido de Java es un poco extraño de esa manera. No puedo ver de inmediato por qué es deseable en absoluto. Personalmente no me molesta para campos ya que de todos modos no me gustan los campos no privados (que no sean constantes) pero lo mismo es cierto para otros miembros.

.NET no tiene el concepto de visibilidad de acceso al paquete / espacio de nombres, pero tiene una alternativa que es el ensamblaje (piense en "archivo jar", no exactamente igual, pero cerrado). Francamente, me gustaría tener opciones de visibilidad de unidades de despliegue de espacio de nombres y , pero parece que estoy condenado a la decepción ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top