2011-12-26 48 views
25

Estoy leyendo el libro The Java Programming Language, 3rd edition.¿Qué significa el modificador protegido?

En el capítulo 3.5, que ilustra el modificador protected con las siguientes palabras:

Más precisamente, más allá de ser accesibles dentro de la clase en sí y para codificar dentro del mismo paquete , un miembro protegido también se puede acceder de una clase a través de las referencias de objeto que son de al menos el mismo tipo que la clase que es, referencias del tipo de clase o uno de sus subtipos.

Las palabras me hace confuso, en dos aspectos:

1. miembro protegido se puede acceder por código dentro del mismo paquete? Lo que sabía antes miembro está protegido sólo se puede acceder por la subclase ...

2. No entiendo lo que quiere decir a protected member can also be accessed from ..., alguien puede explicar a mí por favor?

+0

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html. protected significa que se puede acceder al atributo/método dentro del paquete así como a los subtipos. – aishwarya

+0

Aquí hay una [hoja de trucos] simple (http://stackoverflow.com/a/33627846/276052) que explica 'protected' y los demás modificadores de acceso. – aioobe

Respuesta

0

No entiendo a qué se puede acceder desde un miembro protegido ... es decir, ¿alguien puede explicarme por favor?

Por ejemplo, tiene un objeto A y un objeto B, ambos de la misma clase. El objeto A podrá consultar las propiedades y métodos protegidos del objeto B si tiene una referencia. El modificador protegido se aplica a nivel de clase, no a nivel de objeto. Esto puede ser útil en algunas situaciones.

11

En Java, protected significa que se puede acceder al miembro por cualquier clase en el mismo paquete y por subclases incluso si están en otro paquete.

Nota

A protected variable is not visible outside the package 

por ejemplo B se extiende A y A tiene un int protegido x; se puede usar dentro de la clase B. Pero no se puede acceder utilizando su variable de instancia

2

1) Sí, se puede acceder a los miembros protegidos por clases del mismo paquete. Esa es la forma en que funciona Java.

2) Eso significa que las subclases pueden acceder a ellas.

16
  1. Sí, protected los usuarios pueden acceder desde la propia clase, las subclases de la clase y también todas las clases en el mismo paquete de la clase (no importa si esas son las subclases o no). Si no sabías esa última parte antes, entonces has aprendido algo nuevo.

  2. Simplemente significa que puede usar esos miembros; si un miembro no es accesible, significa que obtendrá un error de compilación cuando intente usarlo.

+0

Para la 2ª afirmación: No arroja errores cuando 'protected int status;' declara inicialmente y accede a ella más tarde. Porque su valor predeterminado se establece en 0 automáticamente. Entonces 'status' siempre será' 0' cuando no sea accesible. –

+0

@JanakaRRajapaksha el valor predeterminado de las variables miembro no tiene nada que ver con la accesibilidad. – Jesper

+0

Supongamos que lo declare desde el principio. Y tratando de acceder desde una clase inaccesible (x) o método (x). Como no es accesible, tendrá su valor predeterminado cuando se lo envíe desde un lugar accesible. Ahora, de acuerdo con su segunda declaración, estoy esperando un error, pero no es así. Y simplemente da 0 ya que es el valor predeterminado. Entonces eso codifica en "x", inútil. –

0

Estas son las respuestas

  1. Sí. Se puede acceder a los miembros protegidos (variables y métodos de instancia) de una clase por otras clases dentro del mismo paquete, así como por cualquier otra clase que amplíe esta clase que contenga el miembro al que se accederá. En la misma especificación, también dieron la tabla donde el nivel de acceso está aumentando estrictamente, proporcionando todos los accesos permitidos en el nivel anterior: privado -> paquete -> protegido -> público

  2. Como miembros protegidos (variables de instancia/estados y métodos/comportamientos) de una clase X son heredados y visibles como parte de las subclases de X, digamos Y1, Y2, Y3 y pueden estar más abajo en los niveles siguientes, cualquier referencia de objeto de tipo X o Y1, Y2, y3 se puede usar para acceder a ese miembro protegido.

0

Solo piénsalo como entre público y privado. Puede acceder a todo, desde clases públicas, y menos desde clases privadas.

Cuestiones relacionadas