Acceso a miembros protegidos en Java

En Java, hay cuatro tipos de modificadores de acceso. Estos son públicos, privados, predeterminados y protegidos. Para hacerse una idea de estos modificadores, puede consultar modificadores de acceso en Java . En este artículo, discutimos la accesibilidad de los miembros protegidos en diferentes casos.

Ahora analicemos varios escenarios de acceso a miembros protegidos que se enumeran a continuación de la siguiente manera:

  1. Accediendo en la misma clase
  2. Accediendo en otras clases del mismo paquete
  3. Acceso a miembros protegidos de una clase en su subclase en el mismo paquete
  4. Acceder a otra clase en un paquete diferente
  5. Acceso en subclase en un paquete diferente

Caso 1: Acceso a miembros protegidos en la misma clase

Podemos acceder a los miembros protegidos de una clase en cualquier parte de ella.

Ejemplo:

Java

// Java Program to Illustrate
// Accessing Protected Members
// in the same class
 
// Main class 
class Sample {
   
    protected int year = 2021;
    protected void printYear()
    {
        System.out.println("Its " + year + " !!");
    }
 
    public static void main(String[] args)
    {
        Sample sample = new Sample();
        System.out.println(sample.year);
        sample.printYear();
    }
}
Producción

2021
Its 2021 !!

Caso 2: Acceso a miembros protegidos en otras clases del mismo paquete 

Podemos acceder a los miembros protegidos de una clase en otra clase que está presente en el mismo paquete.

Java

// Java Program to Illustrate Accessing
// Protected Members
// In Other Class of Same Package
 
// Class 1
class Sample {
    protected int year = 2021;
    protected void printYear() {
        System.out.println("Its "+year+" !!");
    }
}
 
// Class 2
public class Test {
   
    // Main driver method
    public static void main(String[] args) {
        Sample sample = new Sample();
        System.out.println(sample.year);
        sample.printYear();
    }
}
Producción

2021
Its 2021 !!

Caso 3: Acceso a miembros protegidos de una clase en su subclase en el mismo paquete 

Podemos acceder a los miembros protegidos de una clase en su subclase si ambos están presentes en el mismo paquete.

Ejemplo 

Java

// Java Program to Illustrate
// Accessing Protected Members
// of a class in its subclass
// in the same package
 
// Class 1
class Sample {
    static protected String title = "geekforgeeks";
    protected int year = 2021;
    protected void printYear() {
        System.out.println("Its "+year+" !!");
    }
}
 
// Class 2
public class Test extends Sample {
    public static void main(String[] args) {
        Sample sample = new Sample();
        System.out.println(sample.year);
        sample.printYear();
        System.out.println(Sample.title);
    }
}
Producción

2021
Its 2021 !!
geekforgeeks

Caso 4: Acceso a miembros protegidos en otra clase en un paquete diferente 

No podemos acceder a los miembros protegidos de una clase en una clase (no subclase) que está presente en un paquete diferente. 

Ejemplo 1: Paquete 1 

Java

// Java Program to Illustrate
// Accessing Protected Members
// In Another Class in a
// Different Package
 
// Package 1
package package1;
 
// Main class
public class Sample {
   
    static protected String title = "geeksforgeeks";
    protected int year = 2021;
   
    // Protected method
    protected void printYear() {
        System.out.println("Its "+year+" !!");
    }
}

 
Ejemplo 2: Paquete 2 

Java

// Java Program to Illustrate
// Accessing Protected Members
// In Another Class in a
// Different Package
 
// Package 1
package package2;
// Importing above package
import package1.Sample;
 
// Main class
public class Test {
   
    // Main driver method
    public static void main(String[] args) {
       
        Sample sample = new Sample();
        System.out.println(sample.year);
        sample.printYear();
        System.out.println(Sample.title);
    }
}

 
Producción:  

error: year has protected access in Sample
                System.out.println(sample.year);
                                         ^
error: printYear() has protected access in Sample
                sample.printYear();
                      ^
error: title has protected access in Sample
                System.out.println(Sample.title);
                                           ^

Dará un error en tiempo de compilación. En el siguiente ejemplo, crearemos dos clases. Clase de muestra en el paquete 1 y clase de prueba en el paquete 2 e intente acceder a los miembros protegidos de la clase de muestra en la clase de prueba. Se justifica en los dos ejemplos anteriores.

Caso 5: Acceso a miembros protegidos en subclase en un paquete diferente

Podemos acceder a los miembros protegidos de una clase en su subclase presente en un paquete diferente. En el siguiente ejemplo, crearemos dos clases. Clase de ejemplo en paquete1 y clase secundaria en paquete2. La clase secundaria extiende la clase de muestra.

Ejemplo 1.1 

Java

// Java Program to Illustrate Accessing Protected
// Members in sub-class in a different package
 
package package1;
 
// Class
public class Sample {
 
    // Protected attributes
    static protected String title = "geeksforgeeks";
    protected int year = 2021;
    protected void printYear()
    {
        System.out.println("Its " + year + " !!");
    }
}

 
Ejemplo 1.2 

Java

// Java Program to Illustrate Accessing Protected
// Members in Sub-class in a different Package
package package2;
// Importing class from above package
import package1.Sample;
 
// Main class
public class Child extends Sample {
 
    // Method 1
    void helper()
    {
        System.out.println(year);
        printYear();
        System.out.println(Sample.title);
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating child class instance inside main()
        Child child = new Child();
        child.helper();
    }
}

Producción 

2021
Its 2021 !!
geeksforgeeks

Nota: A partir del resultado anterior, se puede percibir que hemos accedido con éxito a los miembros protegidos directamente, ya que estos son heredados por la clase Child y se puede acceder a ellos sin utilizar ninguna referencia. Los miembros protegidos son heredados por las clases secundarias y pueden acceder a ellos como sus propios miembros. Pero no podemos acceder a estos miembros usando la referencia de la clase principal. Podemos acceder a los miembros protegidos solo mediante el uso de una referencia de clase secundaria. 

Ejemplo 2 

Java

// Java Program to Illustrate Compile-time Error Thrown
// When we are Trying to Access Protected Members
// Using Parent Class Reference
 
// Importing packages
package package2;
import package1.Sample;
 
// Importing class extending to Parent class
public class Child extends Sample {
 
    // Method 1
    void helper()
    {
        // Creating instance of Child class inside main()
        Child myself = new Child();
 
        // As Child is sub-class of Sample, we can access
        // the static variable here
        System.out.println(Sample.title);
 
        // This will compile fine as we are accessing year
        // using child class reference variable
        System.out.println(year);
        System.out.println(myself.year);
 
        // This will compile fine as we are accessing
        // printYear() method using child class reference
        // variable
        printYear();
        myself.printYear();
 
        // Creating parent class object
        Sample sample = new Sample();
 
        // Parent class reference holding child class object
        Sample child = new Child();
 
        // Note: Below lines of code won't compile as we are
        // trying to access protected members of parent
        // class using Parent's class reference which is
        // present in other package
 
        // Errors will be thrown
        System.out.println(sample.year);
        sample.printYear();
        child.printYear();
    }
 
    // Method 2
    // Main driver method
    public static void main(String[] args)
    {
        // Creating child class instance inside main()
        Child child = new Child();
 
        // Calling the above method 1 of child class
        child.helper();
    }
}

Producción 

error: year has protected access in Sample
        System.out.println(sample.year); 
                                 ^
error: printYear() has protected access in Sample
        sample.printYear(); 
              ^
error: printYear() has protected access in Sample
        child.printYear();
             ^

Entonces, la principal diferencia entre los modificadores de acceso predeterminados y el modificador protegido es que solo se puede acceder a los miembros predeterminados en el paquete actual. Si bien se puede acceder a los miembros protegidos en cualquier lugar del mismo paquete y fuera del paquete solo en su clase secundaria y utilizando solo la variable de referencia de la clase secundaria, no en la variable de referencia de la clase principal. No podemos acceder a los miembros protegidos utilizando la referencia de la clase principal.

Publicación traducida automáticamente

Artículo escrito por jainlovely450 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *