2012-09-13 15 views
5

Estaba comparando los modificadores de acceso en Java y C#. Quería encontrar una alternativa de C# protected internal en Java. Pero noté que el modificador protected es diferente en los dos idiomas (C# y Java). protected en Java es equivalente a protected internal de C# porque también se puede acceder al miembro dentro del mismo paquete.Confusión con respecto a los especificadores de acceso en Java y C#

tengo dos preguntas

  • ¿Por qué han creado diferentes significados a mismo modificador en Java y C#?
  • ¿Cómo puedo tener protected de C# (El acceso está limitado a la clase que contiene o los tipos derivados de la clase contenedora) en Java?

Respuesta

2

¿Por qué han creado diversos significados al mismo modificador en Java y C# ?

Había que elegir entre la simplicidad y la capacidad de especificar con precisión los diferentes derechos de acceso. Los creadores de Java y (más tarde) los creadores de C# hicieron diferentes elecciones.

¿Cómo puedo proteger C# (El acceso está limitado a la clase que contiene o los tipos derivados de la clase contenedora) en Java?

No puede. Java es más limitado en este punto.

Pero probablemente debería limitar el uso de la palabra clave protected ya que en ambos casos significa una ruptura del principio de encapsulación general. Este uso a veces es útil, ya que un lenguaje demasiado estricto puede significar un código demasiado inútil, pero tenga cuidado de no hacer algo demasiado complicado y difícil de cambiar y mantener. Dar acceso a campos internos o métodos para reemplazar clases a menudo significa que tiene una jerarquía pesada con demasiado acoplamiento de implementación (prefiera la composición sobre la jerarquía para la mantenibilidad).

Tenga en cuenta que una variable o método declarado sin ningún modificador de control de acceso está disponible para cualquier otra clase en el mismo paquete. En mi opinión, eso es mejor que permitir el acceso por subclases de cualquier paquete.

Here's the complete grid:

enter image description here

+0

"tenga cuidado de no hacer algo demasiado atado y difícil de cambiar y mantener". No entendí ¿Cómo juega el modificador un papel en eso? – Shashwat

+0

Cuando tiene subclases que acceden a un campo interno, tiene un acoplamiento fuerte que le prohibe cambiar la implementación de la superclase. Ese es uno de los problemas que la encapsulación ayuda a evitar. –

+0

Entendido. Gracias :) – Shashwat

0

En la documentación de la API Java, el especificador de acceso palabra clave no es proporcionado por Sun.com. Pruebe este ejemplo

D:\>javac Demo.java 
Demo.java:1: error: **modifier** private not allowed here 
private class Test 
     ^
1 error 
Cuestiones relacionadas