Acceder al miembro de Grandparent en Java usando super

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();
    }
}
Producción

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

Deja una respuesta

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