¿Java tiene un modificador de acceso "privado protegido"?
protected package (5)
He visto algunas referencias que se refieren a un modificador de acceso en Java llamado
private protected
(ambas palabras juntas):
private protected someMethod() {
}
Una de las páginas que encontré haciendo referencia a esto está here . La lección de mi escuela también se refirió a este modificador de acceso (y dijo que existe). Sin embargo, su uso da como resultado un error en el lenguaje Java.
Intenté con variables y métodos y estoy bastante seguro de que no existe, pero quiero una explicación de lo que sucedió. ¿Fue considerado, luego rechazado? ¿O se eliminó en una versión más nueva de Java?
Editar: no estoy buscando información sobre la palabra clave
protected
.
Eliminación del modificador de acceso.
Originalmente, Java tenía el modificador
private protected
, pero se eliminó en JDK 1.0.2 (la primera versión
estable
, la Java 1.0 que conocemos hoy).
Algunos tutoriales sobre JDK 1.0.2 (
here
y
here
) dicen lo siguiente:
Nota: La versión 1.0 del lenguaje Java admite cinco niveles de acceso: los cuatro enumerados anteriormente más
private protected
. El nivel de accesoprivate protected
no es compatible con versiones de Java superiores a 1.0; ya no deberías usarlo en tus programas Java.
Otra respuesta sobre SoftwareEngineering.SE afirma:
Java originalmente tenía un modificador de este tipo. Fue escrito
private protected
pero eliminado en Java 1.0.
Ahora eche un vistazo al Historial de versiones de Java :
JDK 1.0
La primera versión se lanzó el 23 de enero de 1996 y se llamó Oak. La primera versión estable, JDK 1.0.2, se llama Java 1.
De esto, podemos concluir que los tutoriales con respecto a la versión 1.0.2 se refieren a la primera versión, JDK 1.0, donde el lenguaje se llamaba Oak, pero el de SoftwareEngineering.SE se refiere a la primera versión estable, JDK 1.0.2 llamada Java 1.0, donde fue eliminado.
Ahora, si intenta buscarlo en la
documentación de Java 1.0
, no lo encontrará, porque como se mencionó anteriormente, se eliminó en JDK 1.0.2, también conocido como Java 1.0.
Esto se prueba nuevamente cuando mira las horas de "Última modificación" para el enlace que publicó.
El enlace que publicó se modificó por última vez en febrero de 1996. Java 1.0 / JDK 1.0.2, cuando se eliminó
private protected
, se lanzó
después de febrero de 1996
y, según las especificaciones, agosto de 1996.
Motivo de Retiro
Algunas fuentes también explican la razón de
private protected
, como
this
.
Citar:
¿Qué fue privado protegido?
Al principio, el lenguaje Java permitía ciertas combinaciones de modificadores, uno de los cuales estaba
private protected
. El significado deprivate protected
era limitar la visibilidad estrictamente a las subclases (y eliminar el acceso al paquete). Más tarde, esto se consideró algo inconsistente y demasiado complejo y ya no es compatible. [5][5] El significado del modificador
protected
cambió en la versión Beta2 de Java, y la combinaciónprivate protected
apareció al mismo tiempo. Remendaron algunos posibles agujeros de seguridad, pero confundieron a muchas personas.
Y SoftwareEngineering.SE también apoya esto, al decir que no valía la pena las inconsistencias y la complejidad adicional, por lo que se eliminó desde el principio.
Interpretación
Mi interpretación de todo esto es que quizás, en los días de Oak, a ambos se les permitió coexistir (de ahí la combinación).
Dado que el significado de
protected
había cambiado
1
, puede haber sido necesario permitir que
private
y
protected
al mismo tiempo.
La introducción se volvió demasiado compleja y no valió la pena, por lo que finalmente se abandonó.
En el momento en que Java 1.0 / JDK 1.0.2 llegó, ya se había eliminado y, por lo tanto, no se puede encontrar en la documentación.
1
En la
Especificación del lenguaje Oak
, Sección 4.10,
Acceso a variables y métodos
, se observa que el modificador predeterminado estaba
protected
:
Por defecto, todas las variables y métodos de una clase están protegidos .
Esto es bastante diferente de lo que tenemos hoy, el acceso predeterminado al paquete.
Esto puede haber allanado el camino para la necesidad de
private protected
, porque lo
private
era demasiado restrictivo y lo
protected
era demasiado indulgente.
Como el enlace que proporcionó en su pregunta sugiere que se usó
private protected
en un
element/member
de una clase, cuando desea que su
subclass
pueda acceder al elemento pero mantenerlo oculto de otras clases en su
package
.
Java
comparación con
C++
tiene un concepto adicional de elementos encapsulados, y ese es un
paquete
.
También se debe entender qué es accesible dentro o fuera de un paquete en
Java
cuando se trata de estos especificadores de acceso como
private
,
public
y
protected
.
Tenga en cuenta que he explicado por qué se utilizó. No en la versión actual, por supuesto.
El ámbito privado está dentro de la clase existente. En donde Protegido se puede acceder dentro del paquete y la clase extendida por las clases en otros paquetes.
Sin problemas si desea que sus variables / métodos tengan acceso fuera del paquete, debe definirlo como protegido / público, de lo contrario privado o algún otro especificador de acceso.
Por lo general, se puede acceder a los métodos protegidos desde un paquete externo y dentro de subclases, es decir, una clase tiene que extender la clase respectiva para aprovechar los métodos definidos protegidos.
Los métodos / variables privadas tienen alcance dentro de la clase. No pueden ser accesibles fuera de la clase.
Por lo tanto, no puede definir Private Protected al mismo tiempo.
Hay historias confusas / poco claras:
Uno, de la fuente de Princeton que pones, y también de los here del here , afirma que:
Nota: La versión 1.0 del lenguaje Java admite cinco niveles de acceso: los cuatro enumerados anteriormente más privado protegido. El nivel de acceso protegido privado no es compatible con versiones de Java superiores a 1.0; ya no deberías usarlo en tus programas Java.
Pero esta característica no se especifica en ninguna documentación oficial para Java 1.0 aquí o here .
Supongo que esta característica no llegó a la versión oficial 1.0, ya que la especificación del idioma oficial es de agosto de 1996 y la fuente de Princeton se modificó por última vez en febrero de 1996 .
PD: lástima de Oracle por eliminar los archivos de versiones anteriores.
No, no puedes usar ambos
private
y
protected
juntos.
Tu tutorial es extraño.
Lo que tienes es el llamado paquete privado o en acceso de paquete protegido de ot6 referencias.
Este es el acceso predeterminado que se habilita cuando no se escribe explícitamente ningún calificador acc6.