Los modificadores de acceso en Java ayudan a restringir el alcance de una clase, constructor, variable, método o miembro de datos. Hay cuatro tipos de modificadores de acceso disponibles en java. El acceso de varios modificadores se puede ver en la siguiente tabla a continuación de la siguiente manera:
La palabra clave protected en Java se refiere a uno de sus modificadores de acceso. Se puede acceder a los métodos o miembros de datos declarados como protegidos desde
- Dentro de la misma clase.
- Subclases de los mismos paquetes.
- Diferentes clases de los mismos paquetes.
- Subclases de diferentes paquetes.
Hay algunos puntos importantes que deben recordarse de la siguiente manera:
- Si se desea acceder a un modificador protegido fuera de un paquete, es necesario aplicar la herencia .
- La protección de un constructor evita que los usuarios creen la instancia de la clase, fuera del paquete.
- Durante la anulación , cuando una variable o método está protegido, se puede anular a otra subclase utilizando solo un modificador público o protegido.
- La clase externa y la interfaz no se pueden proteger.
Implementación: Aquí crearemos dos paquetes p1 y p2. Se hace pública la clase A en p1, para acceder a ella en p2. El método que se muestra en la clase A está protegido y la clase B se hereda de la clase A y luego se accede a este método protegido creando un objeto de clase B.
Ejemplo 1: Paquete p1
Java
// Java program to illustrate // protected modifier package p1; // Class A public class A { protected void display() { System.out.println("GeeksforGeeks"); } }
Paquete p2
Java
// Java program to illustrate // protected modifier package p2; // import all classes in package p1 import p1.*; // Class B is a subclass of A class B extends A { public static void main(String args[]) { B obj = new B(); obj.display(); } }
Producción:
GeeksforGeeks
Ahora intentemos analizar diferentes condiciones de acceso:
- Llamar a la función protegida sin extender la clase principal
- Acceso a una clase protegida
- Acceso a la función de visualización desde el mismo paquete pero diferente
- Acceso a la función de visualización desde un paquete diferente
- Acceder a una clase protegida reemplazando a una subclase dentro del mismo paquete
A. Llamar a la función protegida sin extender la clase principal
Aquí crearemos dos paquetes p1 y p2. Se hace pública la clase A en p1, para acceder a ella en p2. El método que se muestra en la clase A está protegido. Pero el código no podrá acceder a la función «mostrar» ya que la clase secundaria no ha heredado su valor de la clase principal y generará una excepción como se muestra.
Ejemplo 1-A: Paquete p1
Java
// Java program to illustrate Protected Modifier package p1; // Class A public class A { // Method protected void display() { // Print statement System.out.println("GeeksforGeeks"); } }
Ejemplo 1-B: Paquete p2
Java
// Java program to illustrate // protected modifier package p2; // import all classes in package p1 import p1.*; // Class B is a subclass of A class B { public static void main(String args[]) { B obj = new B(); obj.display(); } }
Producción:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: p2.B.display at p2.B.main(B.java:16)
B: Acceso a una Clase Protegida
Aquí estamos tratando de acceder a una clase A protegida que resulta en un error.
Ejemplo A:
Java
// Java program to illustrate // protected modifier package p1; // Class A protected class A { void display() { System.out.println("GeeksforGeeks"); } }
Ejemplo B: Paquete p2
Java
// Java program to illustrate // protected modifier package p2; // import all classes in package p1 import p1.*; // Class B is a subclass of A class B extends A { public static void main(String args[]) { B obj = new B(); obj.display(); } }
Salida: Esto arrojará un error.
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: p2.B.display at p2.B.main(B.java:16)
C: Acceso a la función de visualización desde el mismo paquete pero de diferente clase
Implementación: en este ejemplo, tenemos acceso para acceder a una función protegida «mostrar» del mismo paquete pero de una clase diferente
Ejemplo A: Paquete p1
Java
// Java program to illustrate // protected modifier package p1; // Class A public class A { protected void display() { System.out.println("GeeksforGeeks"); } }
Ejemplo B: clase C
Java
// Java program to illustrate // protected modifier // Class C is a subclass of A public class C { public static void main(String args[]) { A obj = new A(); obj.display(); } }
Producción:
GeeksforGeeks
D: Acceso a la función de visualización desde un paquete diferente
Aquí hemos intentado acceder a la pantalla de función protegida desde un paquete diferente por herencia y extendiendo la clase.
Ejemplo A: Paquete p1
Java
// Java program to illustrate // protected modifier package p1; // Class A public class A { protected void display() { System.out.println("GeeksforGeeks"); } }
Ejemplo B: Paquete p2
Java
// Java program to illustrate // protected modifier package p2; // import all classes in package p1 import p1.*; // Class B is a subclass of A class B extends A { public static void main(String args[]) { B obj = new B(); obj.display(); } }
Producción:
GeeksforGeeks
E: Acceder a una clase protegida anulando una subclase dentro del mismo paquete
Aquí hemos diseñado dos clases A y C, donde la clase C es la anulada.
Ejemplo A: clase A
Java
// Java program to illustrate // protected modifier package p1; // Class A public class A { protected void display() { System.out.println("Class A"); } }
Ejemplo B: clase C
Java
// Java program to illustrate // protected modifier public class C extends A { // overridden function protected void display() { System.out.println("Class C"); } public static void main(String args[]) { C obj1 = new C(); obj1.display(); } }
Producción:
Class C
Publicación traducida automáticamente
Artículo escrito por Chinmoy Lenka y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA