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:
- Accediendo en la misma clase
- Accediendo en otras clases del mismo paquete
- Acceso a miembros protegidos de una clase en su subclase en el mismo paquete
- Acceder a otra clase en un paquete diferente
- 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(); } }
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(); } }
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); } }
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