[英]How can you invoke a method from a grand parent class?
考试中有一个问题说
如果类A扩展了类B,而类B扩展了类C。它们都具有方法test()
如何在A类的C类中调用测试方法?
我愚蠢地选择了。 Super.super.test()。 我认为这是错误的。
其他选项是:
Test()Super.test()。 我想到了 但是,如果我使用它,它将在B类中调用该方法,而B将在C类中调用该方法,但是我们只希望C
很抱歉,如果这不是很清楚或组织不清,请完成考试并感到头晕。
您无法访问超级类的方法。 如果B类在运行超级控件时自动覆盖了B类,则将像B类一样运行B类中包含的两条指令。现在,如果确保B类中未实现任何指令,则将仅自动执行B类中的指令。 C级
如果类B包含您不想运行的指令,请通过更改名称来复制方法,并使用标识符super从类A运行。
不可能这样做。 仅通过调用超类方法,该方法继而在其超类(C)中调用该方法
这在C ++中是可能的,但在Java中是不可能的。 super
总是将您重定向到直接父级。
在Java中不允许super.super()
。 如果您真的想尝试这种方式,则可以自己实现:
public class abc {
public void myName(){
System.out.println("abc");
}
}
public class def extends abc {
public void myName(boolean flag){
if(flag){
super.myName();
}else {
System.out.println("def");
}
}
}
public class mno {
public static void main(String[] args){
def d = new def();
System.out.print("This returns the so called 'super.super' : ");
d.myName(true);
}
}
输出 :这将返回所谓的“ super.super”:abc
我想下面将打印出“ A”。 我没有方便尝试的编译器。
class A
{
private void test ( ) { System . out . println ( "A" ) ; }
public static void main ( String [ ] args )
{
C c = new C ( ) ;
c . test ( ) ;
}
}
class B extends A
{
private void test ( ) { System . out . println ( "A" ) ; }
}
class C extends B
{
private void test ( ) { System . out . println ( "A" ) ; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.