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

 
二重继续,都有相同的方法,怎么样在第三层访问最顶层的同名方法?
这个问题,是我在看《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();
    }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值