martes, 14 de junio de 2016

Modificadores de Acceso Java: Protected

Los modificadores de acceso permiten determinar quién tiene acceso a las variables y métodos miembros de una clase.

Características:
  • Se aplica a campos, métodos y constructores
  • Es preferible que no sea utilizado en campos para no debilitar el encapsulamiento.
  • Suele usarse cuando se trabaja con herencia.
  • Permite el acceso a los componentes desde la misma clase, clases del mismo paquete, y clases que hereden de ella (aunque sean de diferentes paquetes)
  • Tomar en cuenta que el modificador protected nos permite acceder al atributo heredado desde la clase hija, pero no directamente (no sé puede acceder al valor que constituye el atributo de la clase padre)


A continuación tenemos nuestra clase principal, la cual contiene un método y una variable protegida. 

package com.kateledrod.java.acceso.modificador;

/**
 *
 * @author Kateledrod
 */
public class ClaseEjemplo {
   
    protected String variableProtegida = "Variable Protegida Clase Ejemplo";
   
    protected void metodoProtegido(){
        System.out.println("Método protected. " +variableProtegida);
    }
}


Si aplicamos la herencia para nuestro método anterior, las variables y métodos que tengan como modificador de acceso protected, podrán visualizarse y utilizarse desde la subclase. 

package com.kateledrod.java.acceso.modificador;

/**
 *
 * @author Kateledrod
 */
public class SubClaseEjemplo extends ClaseEjemplo{
   
    //nos permite acceder al atributo heredado, pero no directamente
    private void llamadaMetodosClaseEjemplo(){
        variableProtegida = "Acceso a variable protected";
        metodoProtegido();       
    }   
   
    public static void main(String[] args) {
        SubClaseEjemplo subClaseEjemplo = new SubClaseEjemplo();
        subClaseEjemplo.llamadaMetodosClaseEjemplo();
    }
}


De igual manera si agregamos una clase al paquete asignado a nuestra ClaseEjemplo, cualquier clase dentro de este paquete tendrá acceso a métodos y variables protected. Como se visualiza a continuación.

package com.kateledrod.java.acceso.modificador;

/**
 *
 * @author Kateledrod
 */
public class ClaseEjemploMismoPaquete {
   
    private void llamadaMetodoClaseEjemplo(){
        ClaseEjemplo claseEjemplo = new ClaseEjemplo();
        claseEjemplo.variableProtegida = "Acceso a variable protected";// se tiene acceso por paquete
        claseEjemplo.metodoProtegido();//se tiene acceso por paquete   
    }
}


Sin embargo si creamos un paquete distinto y agregamos una clase, desde la cual deseamos accesar a los métodos y variables protected de nuestra clase ejemplo. El acceso al mismo no será posible. 

package com.kateledrod.java.acceso.modificador.otro;

import com.kateledrod.java.acceso.modificador.ClaseEjemplo;

/**
 *
 * @author Kateledrod
 */
public class ClaseEjemploDifPaquete {
   
    private void llamadaMetodosClaseEjemplo(){
        //variableProtegida = "Acceso a variable protected";// no se tiene acceso desde paquete diferente
        //metodoProtegido(); // no se tiene acceso desde un paquete diferente  
       
        ClaseEjemplo claseEjemplo = new ClaseEjemplo();
        //claseEjemplo.variableProtegida = "Acceso a variable protected";// no se tiene acceso desde paquete diferente
        //claseEjemplo.metodoProtegido(); // no se tiene acceso desde un paquete diferente
    }
   
}


Ahora que si, agregamos una subclase a un paquete distinto al que se encuentra nuestra ClaseEjemplo, tendremos acceso a métodos y variables protected por medio de herencia.

package com.kateledrod.java.acceso.modificador.otro;

import com.kateledrod.java.acceso.modificador.ClaseEjemplo;

/**
 *
 * @author Kateledrod
 */
public class SubClaseEjemploDifPaquete extends ClaseEjemplo{
   
    private void llamadaMetodoClaseEjemplo(){
        variableProtegida = "Acceso a variable protected";// se tiene acceso desde un paquete diferente por herencia
        metodoProtegido(); // se tiene acceso desde un paquete diferente por herencia     
    }
}


0 comentarios:

Publicar un comentario