2012-02-25 20 views
9

He estado trabajando con Android desde hace unos años, ni una vez tuve un maestro o alguien que me diga qué hacer. Todo este tiempo me he preguntado a mí mismo esto.En Java, ¿qué sucede cuando tienes un método con una palabra clave de visibilidad no especificada?

Cuando se tiene un método generalmente veo ...

public void method(){ 
//Stuff 
} 

o

private void method(){ 
//stuff 
} 

Sé que el vacío es un método sin valor de retorno, y que es la visibilidad pública de el método de una manera, pero ¿importaría si acabo de utilizar algo como esto ...

void method(){ 
//stuff 
} 

Porque entonces el meth La visibilidad de los archivos solo sería predeterminada de todos modos?

No tengo idea de si tengo razón o no, ¿es una buena práctica especificar "público" o "privado"?

+1

No estoy seguro de entender la pregunta. Si desea que el método sea público, debe especificar público. Si desea que sea privado, debe especificar privado. Y si desea el valor predeterminado (es decir, visibilidad del paquete), no especifica nada. – sepp2k

Respuesta

17

Si no se especifica nada tiene un significado específico:

  • public - Cualquier clase puede acceder a este miembro
  • protected - subclases pueden acceder a este miembro (así como el código de la misma clase o en el mismo paquete)
  • private - único código en la misma clase pueden acceder a este miembro
  • nada ("default" de acceso) - sólo el código en el mismo paquete puede acc ess este miembro

Podría decirse que el último caso debería haber tenido su propia palabra clave, pero estamos atrapados ahora. A menos que realmente pretenda usar la visibilidad predeterminada, es mala forma no especificar nada: ¿realmente necesitaba visibilidad del paquete por algún motivo, o simplemente optó por la visibilidad del paquete para todo? La mejor práctica es usar explícitamente private para miembros no públicos a menos que necesite uno de los otros.

+0

Nah, realmente no lo sabía, no era que fuera flojo ni nada, gracias por eso, solo quería saber la mejor práctica, realmente, aceptaré la respuesta en 9 minutos – FabianCook

+1

@SmartLemon, no estoy realmente acusando de ser flojo, es solo que alguien que lea tu código después no sabrá si realmente quieres tener visibilidad del paquete si solo lo usas por defecto en todas partes :) – bdonlan

+1

Estrictamente hablando, esta respuesta no es realmente correcta. protegido significa más que esto. Cada nivel es un súper conjunto estricto del anterior, lo que significa que un método protegido puede ser utilizado por ambas subclases, y también por otro código en el mismo paquete. –

6

Java tiene cuatro niveles de visibilidad: público, protegido, (predeterminado), privado. El significado de estos es el siguiente:

  1. public - hace que sus métodos sean accesibles para cualquier otra clase.
  2. protected - hace que sus métodos sean accesibles para cualquier clase en el mismo paquete O cualquier subclase de su clase.
  3. (predeterminado, es decir, sin modificador): hace que sus métodos sean accesibles solo para las clases en el mismo paquete.
  4. privado: hace que sus métodos sean accesibles solo para la clase actual.

Las mismas reglas se aplican cuando se especifican los modificadores de acceso en clases, métodos y campos.

6

Java tiene cuatro niveles de visibilidad: público, protegido, (por defecto), privados

  1. visible al paquete. el valor por defecto. No se necesitan modificadores.
  2. Visible solo para la clase (privado).
  3. Visible para el mundo (público).
  4. Visible para el paquete y todas las subclases (protegido).

enter image description here

modificador de acceso por defecto - Sin palabras clave: modificador de acceso

defecto significa que no declaramos explícitamente un acceso modificador para una clase, campo, etc. método

Una variable o método declarado sin ningún modificador de control de acceso es disponible para cualquier otra clase en el mismo paquete. El modificador predeterminado no se puede usar para métodos, campos en una interfaz.

modificador de acceso privado - privado:

métodos, variables y constructores que se declaró privada sólo se puede acceder dentro de la propia clase declarada.

El modificador de acceso privado es el nivel de acceso más restrictivo. La clase y las interfaces no pueden ser privadas.

Se puede acceder a las variables que se declaran privadas fuera de la clase si hay métodos públicos getter en la clase.

El uso del modificador privado es la principal forma en que un objeto encapsula y oculta los datos del mundo exterior.

modificador de acceso público - público:

Una clase, método, constructor, etc interfaz pública puede ser declarado se accede desde cualquier otra clase. Por lo tanto, se puede acceder a los campos, métodos, bloques declarados dentro de una clase pública desde cualquier clase perteneciente al Universo Java.

Sin embargo, si la clase pública a la que intentamos acceder se encuentra en un paquete diferente, entonces la clase pública todavía necesita ser importada.

Debido a la herencia de clases, todos los métodos y variables públicos de una clase son heredados por sus subclases.

modificador de acceso protegido - protegida:

Variables, métodos y constructores que se declaran protegidos en una superclase sólo se puede acceder por las subclases en otro paquete o cualquier clase dentro del paquete de la clase de miembros protegidos.

El modificador de acceso protegido no se puede aplicar a las interfaces de clase y . Los métodos, los campos pueden declararse protegidos, sin embargo, los métodos y los campos en una interfaz no se pueden declarar protegidos.

El acceso protegido le da a la subclase la posibilidad de usar el método auxiliar o variable, al tiempo que evita que una clase no relacionada intente utilizar .

Cuestiones relacionadas