lunes, 14 de mayo de 2012

Accesibilidad


Acceso privado, palabra clave “private”

      Al definir un atributo, método o clase como privado, se le esta dando acceso solo desde la clase donde fue definido. Por ejemplo, en el caso de velocidad de un Auto:

         public class Auto{

               private int velocidad;

               public void acelerar(){
               this.velocidad += 10;
               }
        
         }

      Por lo tanto el único modo de acceder a modificar la velocidad es a través del método acelerar. Esta propiedad no esta accesible desde ningún otro alcance sino el de la clase.
      Para poder acceder al atributo velocidad, solo podrán hacerlo los métodos de la misma clase.

Acceso por defecto, “default” o “package”

      En el caso del acceso por defecto, que es el acceso cuadno no se declara la accesibilidad a un atributo, método o clase, el acceso es dentro del mismo paquete o directorio. Por ejemplo si tengo dos clases Auto y Camion, y auto tiene un conductor sin definir su accesibilidad, es decir:

         package vehículos;
        
               public class Auto extends Vehiculo{
        
                               Conductor getConductor(){
                               //Acá se retorna el conductor
                               }
         }
   
Luego en la clase Camion que esta en el mismo package:

      package vehículos;
     
      public class Camion extends Vehiculo{
        
         public void comunicar(Vehiculo v){
         v.getConductor().conversar(); //Se tiene acceso a getConductor por estar ambas clases en el mismo package.
         }

      }


Para poder acceder al método getConductor() podrán hacerlo únicamente las clases ubicadas en el mismo package o directorio.

Acceso protegido, palabra clave “protected”

      Al definir un atributo o método como protegido estamos dejándolo disponible para las clases que heredan de esta clase, ejemplo:

         public class Vehiculo{
               protected int cantidadDeRuedas = 4;
         }

      Luego en la clase Auto, tendremos acceso a cantidadDeRuedas:

         public class Auto extends Vehiculo{
               
                public int getCantidadDeRuedas(){
                return this.cantidadDeRuedas;
                }
         }


      Para poder acceder al atributo cantidadDeRuedas, solo podrán hacerlo las clases que heredan de Vehiculo, es decir la familia de clases.

Acceso publico, palabra clave public

      Definiendo un atributo o método o clase como público permite que se tenga acceso a estos desde cualquier alcance, desde todos lados.
      Acceder a los atributos públicos, todos podrán hacerlo.

Resumen de accesibilidad

Accesibilidad
Acceso en la misma clase
Acceso en el mismo package
Acceso en el árbol de herencia
Acceso desde todas las clases
private
Si
No
No
No
default o package
Si
Si
No
No
protected
Si
Si
Si
No
public
Si
Si
Si
Si

2 comentarios: