📅  最后修改于: 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()