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é en referencia a esto está aquí . 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 protected
palabra clave.
private protected
modificador combinado allí.private protected
en esa respuesta, pero no explica por qué o qué le sucedió, de qué trata esta pregunta.Respuestas:
Eliminación del modificador de acceso.
Java originalmente tenía el
private protected
modificador, 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 ( aquí y aquí ) dicen lo siguiente:Otra respuesta sobre SoftwareEngineering.SE afirma:
Ahora eche un vistazo al Historial de versiones de Java :
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
private protected
se eliminó, 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
private protected
, como esta . Citar:Y SoftwareEngineering.SE también respalda 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 permitía coexistir (de ahí la combinación). Debido a que
protected
el significado había cambiado 1 , puede haber sido necesario permitirprivate
yprotected
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 era
protected
:Esto es bastante diferente de lo que tenemos hoy, el acceso predeterminado al paquete. Esto puede haber allanado el camino para la necesidad
private protected
, porqueprivate
era demasiado restrictivo yprotected
demasiado indulgente.fuente
Early on, the Java language allowed for certain combinations of modifiers,
¿Eso significa que había más que solo "Protección Privada"?Hay historias confusas / poco claras:
Uno, de la fuente de Princeton que pones, y también de los archivos del MIT , afirma que:
Pero esta característica no se especifica en ninguna documentación oficial para Java 1.0 aquí o aquí .
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 las versiones anteriores.
fuente
Como sugiere el enlace que proporcionó en su pregunta,
private protected
se usó enelement/member
una clase, cuando deseasubclass
que pueda acceder al elemento pero mantenerlo oculto de otras clases en élpackage
.Java
si se compara conC++
tiene un concepto adicional de elementos de encapsulación, y ese es un paquete . También se debe entender qué es accesible dentro o fuera de un paqueteJava
cuando se trata de estos especificadores de acceso comoprivate
,public
&protected
.Tenga en cuenta que he explicado por qué se utilizó. No en la versión actual, por supuesto.
fuente
No, no se puede utilizar tanto en
private
unprotected
conjunto. Tu tutorial es extraño. Lo que tiene 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.fuente
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 debe 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.
fuente