miércoles, 14 de septiembre de 2011

12 .- Especificadores de Acceso

Modificadores (public, protected y private)

Se trata de una palabra que antecede a la declaración de una clase, método o propiedad de clase. Hay tres posibilidades: public, protected y private. Una cuarta posibilidad es no utilizar ninguna de estas tres palabras; entonces se dice que se ha utilizado el modificador por defecto (friendly).
Los especificadores determinan el alcance de la visibilidad del elemento al que se refieren. Referidos por ejemplo a un método, pueden hacer que el método sea visible sólo para la clase que lo utiliza (private), para éstas y las heredadas (protected), para todas las clases del mismo paquete (friendly) o para cualquier clase del tipo que sea (public).

En la siguiente tabla se puede observar la visibilidad de cada especificador:




Modificadores static y final.

Un atributo de una clase se puede modificar con la palabra reservada static, con ello indicamos que el atributo no pertenece a las instancias de la clase si no a la propia clase. Que quiere decir esto?, pues que no existe una copia de ese atributo en cada uno de los objetos de la clase, si no que existe una unica copia que es compartida por todos los objetos de la clase. Por ello, a los atributos
static se les llama atributos de la clase. Una consecuencia de lo anterior es que para acceder a los atributos static de una clase no necesitamos crear una instancia de la clase, podemos acceder a
ellos a través del nombre de la clase.

De igual modo, podemos modificar los métodos de una clase con la palabra reserva static. A estos métodos se les llaman métodos de la clase, y, al igual que con los atributos static, podemos usarlos a través del nombre de la clase, sin necesidad de crear ninguna instancia de la clase. Pero existe una restricción, los métodos estáticos de una clase solo pueden acceder a atributos estáticos u otros
métodos estáticos de la clase, pero nunca a atributos o métodos que no lo sean. Ves porque? Que ocurrir a si desde un método estático y usando el nombre de la clase intentases acceder a un atributo de instancia de la clase? 
En el siguiente ejemplo de código hemos añadido un contador para saber el numero de instancias de la clase Persona que se han creado:

 package tipos ;

 public class Persona implements Contacto {
             private String nombre ;
         private String apellidos ;
         private String telefono ;
         private static nInstancias ;

 publ ic Persona ( ) {
         super ( ) ;
         iniciaAtributos( ) ;
 }

 public static int getNInstancias( ) {
         return  nInstancias ;
 }

Fjate que el metodo getNInstancias() que accede al atributo nInstancias es estático. En el siguiente ejemplo de código se est a utilizando este método estático a través del nombre de la clase y a través de una instancia concreta:



 publ ic f inal class Principal {
       private Pr i n c i p a l ( ) {
       super ( ) ;
 }

  private void e j e cu t a ( ) {
    Persona unaPersona = new Persona ( ) ;

 // Accedemos al método a través de la clase

 System.out.p r i n t l n ( " Numero de Personas Creadas : " + Persona.getNInstancias ( ) ) ;

 Persona otraPersona = new Persona ( " James " , " Bond " , " 555 123 456 " ) ;

 // Accedemos al método a través de una instancia concreta

Cuando un atributo de una clase los modificamos en su definición con la palabra reservada final, estamos indicando que ese atributo no puede cambiar de valor, por ejemplo:

 private f inal String autor = " Oscar " ;

Una vez definido, este atributo no puede cambiar de valor, si lo intentásemos cambiar el compilador nos dará un error.
Muchas veces los modificadores static y final se utilizan en combinación para definir constantes, como en el siguiente ejemplo:

 publ ic clas s Constantes {
 public static final double PI = 3 . 1 4 1 5 9 2 ;
 . . .
 g

De este modo, la constante es accesible desde cualquier otra clase (al ser public) y podemos leerla a través del nombre de la clase de este modo Constantes.PI, pero si por descuido intentamos modificarla, el compilador de Java nos dar a un error.




No hay comentarios:

Publicar un comentario en la entrada

Nota: solo los miembros de este blog pueden publicar comentarios.