📜  使用super访问Java祖父母的成员

📅  最后修改于: 2020-03-23 00:44:09             🧑  作者: Mango

在Java中直接访问祖父母的成员:
预测以下Java程序的输出。

// 文件名 Main.java
class Grandparent {
    public void Print() {
        System.out.println("祖父母 Print()");
    }
}
class Parent extends Grandparent {
    public void Print() {
        System.out.println("父母 Print()");
    }
}
class Child extends Parent {
    public void Print() {
        super.super.Print();  // 试着使用祖父母的Print()
        System.out.println("孩子 Print()");
    }
}
public class Main {
    public static void main(String[] args) {
        Child c = new Child();
        c.Print();
    }
}

输出:编译器错误
“ super.super.print();”行中有错误。在Java中,类无法直接访问祖父母的成员。虽然在C++中是允许的。在C++中,我们可以使用范围解析运算符(::)来访问继承层次结构中的任何祖先成员。在Java中,我们只能通过父类访问祖父母的成员例如,以下程序可以编译并正常运行。

// 文件名 Main.java
class Grandparent {
    public void Print() {
        System.out.println("祖父母 Print()");
    }
}
class Parent extends Grandparent {
    public void Print() {
        super.Print();
        System.out.println("父母 Print()");
    }
}
class Child extends Parent {
    public void Print() {
        super.Print();
        System.out.println("孩子 Print()");
    }
}
public class Main {
    public static void main(String[] args) {
        Child c = new Child();
        c.Print();
    }
}

输出:

祖父母 Print()
父母 Print()
孩子 Print()