Modificadores de acceso: public, private, protected y default

Solo disponible en BuenasTareas
  • Páginas : 11 (2618 palabras )
  • Descarga(s) : 0
  • Publicado : 24 de septiembre de 2010
Leer documento completo
Vista previa del texto
Modificadores de acceso: public, private, protected y default
Los modificadores de acceso, como su nombre indica, determinan desde qué clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos: public, private, protected y el tipo por defecto, que no tiene ninguna palabra clave asociada, pero se suele conocer como default o package-private.
Si no especificamos ningúnmodificador de acceso se utiliza el nivel de acceso por defecto, que consiste en que el elemento puede ser accedido sólo desde las clases que pertenezcan al mismo paquete.
El nivel de acceso public permite a acceder al elemento desde cualquier clase, independientemente de que esta pertenezca o no al paquete en que se encuentra el elemento.
private, por otro lado, es el modificador más restrictivo yespecifica que los elementos que lo utilizan sólo pueden ser accedidos desde la clase en la que se encuentran. Este modificador sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría sentido.
Es importante destacar también que private convierte los elementos en privados para otras clases, no paraotras instancias de la clase. Es decir, un objeto de una determinada clase puede acceder a los miembros privados de otro objeto de la misma clase, por lo que algo como lo siguiente sería perfectamente válido:
view plaincopy to clipboardprint?
1. class MiObjeto {   
2.   private short valor = 0;   
3.   
4.   MiObjeto(MiObjeto otro) {   
5.     valor = otro.valor;   
6.  }   
7. }  
class MiObjeto {
private short valor = 0;

MiObjeto(MiObjeto otro) {
valor = otro.valor;
}
}
El modificador protected, por último, indica que los elementos sólo pueden ser accedidos desde su mismo paquete (como el acceso por defecto) y desde cualquierclase que extienda la clase en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o interfaces no internas.
Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:
Modificadores de acceso |
| La misma clase | Otra clase del mismo paquete | Subclase de otro paquete | Otraclase de otro paquete |
public | X | X | X | X |
protected | X | X | X | |
default | X | X | | |
private | X | | | |
static
A pesar de lo que podría parecer por su nombre, heredado de la terminología de C++, el modificador static no sirve para crear constantes, sino para crear miembros que pertenecen a la clase, y no a una instancia de la clase. Esto implica, entre otras cosas, queno es necesario crear un objeto de la clase para poder acceder a estos atributos y métodos. Este es el motivo por el cual es obligatorio que main se declare como static; de esta forma no tenemos que ofrecer un constructor vacío para la clase que contiene el método, o indicar de alguna forma a la máquina virtual cómo instanciar la clase.
Un uso del modificador static sería, por ejemplo, crear uncontador de los objetos de la clase que se han creado, incrementando la variable estática en el constructor:
view plaincopy to clipboardprint?
1. class Usuario {   
2.   static int usuarios = 0;   
3.   
4.   Usuario() {   
5.     usuarios++;   
6.   }   
7. }  
class Usuario {
static int usuarios = 0;Usuario() {
usuarios++;
}
}
Como es de esperar, dado que tenemos acceso a los atributos sin necesidad de crear un objeto, los atributos estáticos como usuarios no se inicializan al crear el objeto, sino al cargar la clase.
Podemos acceder a estos métodos y atributos bien desde la propia clase
view plaincopy to clipboardprint?...
tracking img