如何从祖父类中调用方法?

时间:2011-10-15 17:50:18

标签: java

考试中有一个问题是

如果A类扩展B类而B扩展C类。它们都有方法test()

如何调用A类C类中的方法测试?

我愚蠢地选择了。 Super.super.test()。我认为这是错误的。

其他选择是:

测试() Super.test()。我想到了这个。但是如果我使用它,它将调用B类中的方法,而B类将调用C类中的方法 但我们只想要C

对不起,如果这不是很清楚或没有组织完成考试,有点头晕。

5 个答案:

答案 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" ) ; }
}