¿Cuál es la diferencia entre público, protegido, paquete privado y privado en Java?

En Java, ¿existen reglas claras sobre cuándo usar cada uno de los modificadores de acceso, es decir, el predeterminado (paquete privado), public, protected y private, mientras hace class y interface y ocuparse de la herencia?

preguntado Oct 18 '08, 17:10

private se esconde de otras clases dentro del paquete. public expone a clases fuera del paquete. protected es una versión de public restringido solo a subclases. -

@Tennenrishin - No; contrario a C ++, en Java protected hace que el método también sea accesible desde todo el paquete. Esta estupidez en el modelo de visibilidad de Java rompe el objetivo de protected. -

@Nicolas Es accesible desde el paquete completo, con o sin protected. Como acceso modificador, todo lo que protected hace es exponer a subclases fuera del paquete. -

@tennenrishin - bueno, eso es lo que dijo Nicolas ... y lo estás repitiendo ahora. Lo que dijiste originalmente fue que protected - y cito - 'es una versión de público restringida solo a subclases' lo cual no es cierto por su propia admisión ya que protegido también permite el acceso a través de todo el paquete (ergo, no restringir acceso a subclases.) -

También estoy de acuerdo con Nicolas en que el modo de acceso protegido en Java es una idiotez. Lo que sucedió es que Java combinó los calificadores de restricción de acceso horizontal (enrejado) y vertical. El alcance predeterminado es una restricción horizontal / de celosía, siendo la celosía el paquete. Lo público es otra restricción horizontal donde la celosía es el mundo entero. Privado y (C ++) protegido son verticales. Hubiera sido mejor si tuviéramos un acceso transversal, digamos, protected-package para los raros casos en los que realmente lo necesitábamos, dejando protected para ser equivalente a la versión C ++ de protected. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.