二重继续,都有相同的方法,怎么样在第三层访问最顶层的同名方法?

 
二重继续,都有相同的方法,怎么样在第三层访问最顶层的同名方法?
这个问题,是我在看《Think in Java》的时候,突然想到的,不知道行不行,想测试,我没有测试通过,不知道是不行吗,还是我没有找对方法。
如下面三个类:
abstract class A {
    void p()
    {
       System. out .println( "A" );
    }
}
public class B extends A {
    void p()
    {  
       super .p(); // 调用 A 中的 p() 方法
       System. out .println( "B" );
    }
}
public class C extends B {
    /**
      * 怎么样在 C 里面,不创建新类的情况下,怎么样访问 A 里面 p() 方法?结果只打印“A”
     *状态:还没有解决
      */
    void p()
    {
       super .p(); // 只能够调用 B 中的 p() 方法
       //super.super.p();// 没有这种用法
       //A a=new A();// 抽象类不允许实例化
       // 怎么样去访问 A 中的 p() 方法?
       System. out .println( "C" );
    }  

    public static void main(String[] arg)

    {
      
//new C().p();
       //A a=new C();
       A a=new C();//向上转型,后面的类转换为基类,与其它类转换为Object类一样
       a.p();
      
//以上的这种操作方式打印出来的也是ABC
    }

}

答案:
由 Donnki解决,解决方法是采用匿名内部类,可是原理还没有弄懂,希望 Donnki能够回来继续说明一下原理,或者知道的朋友请补充一下。
(找到一点答案,来自群里的BOIN:匿名内部类,实际就是新建一个类继承了A.匿名内部类是默认的对被匿名的类的继承,比如常用的swing框架中的对事件的绑定 就要在匿名内部类中继承并重写ActionLinstener基类的 actionPerform方法。其实(匿名)内部类是用来解决Java回调机制的)

将C里面的main方法写成如下:
 
    public static void main(String[] arg)
    {
       //new C().p();
       //A a=new C();
       //A a=new C();// 向上转型,后面的类转换为基类,与其它类转换为 Object 类一样
       //a.p();
       // 以上的这种操作方式打印出来的也是 ABC
      
       // 采用匿名内部类可以解决这个问题,结果就只有 A
       A a = new A(){};
       a.p();
    }
 

你可能感兴趣的:(java,c,object,swing,String,Class)