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

本文探讨了如何在Java中从子类访问顶层抽象类的同名方法,通过使用匿名内部类实现这一目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二重继续,都有相同的方法,怎么样在第三层访问最顶层的同名方法?
这个问题,是我在看《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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值