Accediendo directamente al miembro de Grandparent en Java:
Prediga la salida del siguiente programa Java.
Java
// filename Main.java class Grandparent { public void Print() { System.out.println("Grandparent's Print()"); } } class Parent extends Grandparent { public void Print() { System.out.println("Parent's Print()"); } } class Child extends Parent { public void Print() { // Trying to access Grandparent's Print() super.super.Print(); System.out.println("Child's Print()"); } } public class Main { public static void main(String[] args) { Child c = new Child(); c.Print(); } }
Producción:
prog.java:20: error: <identifier> expected super.super.Print(); ^ prog.java:20: error: not a statement super.super.Print();
Hay un error en la línea «super.super.print();». En Java, una clase no puede acceder directamente a los miembros de los abuelos. Sin embargo, está permitido en C++. En C++, podemos usar el operador de resolución de alcance (::) para acceder a cualquier miembro de antepasado en la jerarquía de herencia. En Java, podemos acceder a los miembros de los abuelos solo a través de la clase principal.
Por ejemplo, el siguiente programa compila y funciona bien.
Java
// filename Main.java class Grandparent { public void Print() { System.out.println("Grandparent's Print()"); } } class Parent extends Grandparent { public void Print() { super.Print(); System.out.println("Parent's Print()"); } } class Child extends Parent { public void Print() { super.Print(); System.out.println("Child's Print()"); } } public class Main { public static void main(String[] args) { Child c = new Child(); c.Print(); } }
Grandparent's Print() Parent's Print() Child's Print()
¿Por qué Java no permite acceder a los métodos de los abuelos?
Viola la encapsulación. No debería poder omitir el comportamiento de la clase principal. A veces tiene sentido poder omitir el comportamiento de su propia clase (particularmente desde dentro del mismo método) pero no el de sus padres.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA