使用超级
在 Java 中访问祖父母的成员
原文:https://www . geeksforgeeks . org/access-祖辈-成员-in-Java-use-super/
在 Java 中直接访问祖父母的成员:
预测以下 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();
}
}
输出:
prog.java:20: error: <identifier> expected
super.super.Print();
^
prog.java:20: error: not a statement
super.super.Print();
“super.super.print()”行有错误。在 Java 中,类不能直接访问祖父母的成员。不过在 C++中是允许的。在 C++中,我们可以使用范围解析运算符(::)来访问继承层次结构中任何祖先的成员。 在 Java 中,我们只能通过父类访问祖父母的成员。
例如,下面的程序编译并运行良好。
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();
}
}
Output
Grandparent's Print()
Parent's Print()
Child's Print()
为什么 java 不允许访问祖父母的方法?
它违反了封装。您不应该能够绕过父类的行为。有时能够绕过您自己的类的行为(特别是从同一个方法中)而不是您的父类的行为是有意义的。
如果你发现任何不正确的地方,或者你想分享更多关于上面讨论的话题的信息,请写评论。
版权属于:月萌API www.moonapi.com,转载请注明出处