考试中有一个问题是
如果A类扩展B类而B扩展C类。它们都有方法test()
如何调用A类C类中的方法测试?
我愚蠢地选择了。 Super.super.test()。我认为这是错误的。
其他选择是:
测试() Super.test()。我想到了这个。但是如果我使用它,它将调用B类中的方法,而B类将调用C类中的方法 但我们只想要C
对不起,如果这不是很清楚或没有组织完成考试,有点头晕。
答案 0 :(得分:4)
你无法访问超级超类的方法。如果B类在运行super时自动覆盖,则会运行B类中包含的指令,如C类中所示。现在,如果确保B类中没有实现指令,则只会自动执行指令C班。
如果B类具有您不想运行的指令,请通过更改名称来复制该方法,并使用标识符super从A类运行。
答案 1 :(得分:3)
不可能这样做。只能通过调用超类方法,而超类方法又调用超类(C)中的方法
答案 2 :(得分:1)
这在C ++中是可行的,但在Java中则不行。 super
始终将您重定向到直接父级。
答案 3 :(得分:0)
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
答案 4 :(得分:0)
我认为下面会打印出“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" ) ; }
}