繁体   English   中英

如何从父级父类调用方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM