2009-09-12 17 views
5

Quiero algo similar a protected, donde solo una clase que implementa el campo protected y cualquier cosa que las subclases puedan acceder a él.Java: ¿Modificador de acceso más restrictivo que 'protegido', menos restrictivo que 'privado'?

Por lo tanto, deseo poder declarar una variable en la clase base como private, pero aún así poder acceder a ella desde una subclase.

Quizás esto va en contra de la naturaleza misma de las subclases, private y/o protected.

¿Algo como esto existe en Java?

+0

Como regla general, exponer variables es una mala idea, incluso para las subclases. Hay excepciones, pero te animo a que pienses mucho sobre por qué quieres hacer esto. (Me doy cuenta de que la misma pregunta se aplicaría a una llamada al método getter, solo quería señalar un posible problema) –

Respuesta

9

sólo hay cuatro niveles de acceso para los campos en Java:

  • private
  • paquete-privada (por defecto; sin modificador de acceso)
  • protected
  • public

protected permitirá subclases, otras clases en el mismo p Ackage, y miembros de la misma clase para acceder al miembro protected.

La respuesta corta es que no hay forma de lograr exactamente lo que se desea.

Para obtener una descripción de esos cuatro modificadores de acceso, Controlling Access to Members of a Class de The Java Tutorials tiene información más específica.

+0

Esto es desafortunado. :( –

1

No, no hay access modifier para hacer exactamente eso. El modificador protected es lo más parecido, pero eso expone el campo a cualquier clase en el mismo paquete, así como a subclases (dentro o fuera del mismo paquete).

2

Si controla la base de código, siempre puede controlar lo que entra en el paquete con la clase base; si está solo en su paquete, solo las subclases pueden acceder al miembro que desea mantener en privado, excepto las subclases.

+0

Esta es una solución bastante buena. Al-thou no responde a la pregunta de si hay un modificador como ese (que no existe) pero proporciona la funcionalidad requerida. – PSIXO

0

No es posible. U aún puede declarar sus variables como privadas y luego declarar métodos públicos que modifiquen las variables en la superclase. A continuación, llama al método público en la variable.

Cuestiones relacionadas