求教在Java中如何调用超类的方法

谁用了我的英文名 2016-03-10 12:22:21
参考代码片段:

class A {
public void show() {
System.out.println("A");
}
}
class B extends A {
public void show() {
System.out.println("B");
}
}
class C extends B {
public void show() {
System.out.println("C");
}
}

现在我们只有一个C的实例new C();我们的需求是调用A类下的show方法。
当然,职责链模式可以完成这个任务

class A {
public void show() {
System.out.println("A");
}
}
class B extends A {
public void show() {
super.show();
System.out.println("B");
}
}
class C extends B {
public void show() {
super.show();
System.out.println("C");
}
}

在这种情况下,B类下的方法必定得到执行。
困境在于,不允许为A,B两个类添加额外的方法
有没有办法跳过B直接访问到A.show()呢?

1.super访问符
自然地想到,能否super.super.show();去获取超父类的show方法。
关于super.super的想法参见此2008年的链接: http://bbs.csdn.net/topics/210077293
其中,((A)this).f()这种做法并没有实现调用超类方法的目的,这也许是jdk升级带来的问题。

2.反射
试图执行A.class.getDeclaredMethod("show").invoke(this);
但我们忽略了一个问题,通过反射去获取的Method方法只是一个方法声明,而在C这个类里面,这个方法被C.show去实现了。


呐,我没主意了,谁有办法?
...全文
698 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
andychen314 2016-03-10
  • 打赏
  • 举报
回复
这不符合面象对象设计原则吧~ 父类方法已经被重写,子类如果再想调用,只能在子类的方法中 super父类的方法 super.xxx();
  • 打赏
  • 举报
回复
引用 1 楼 luolihua11 的回复:
    public void show() {
       A a = new A();
        a.show();
        System.out.println("C");
    }
这等于说又new 了一个对象啊! 局限太多太多根本不是解决问题的办法! 假如A和B是abstract的怎么办? 假如A调用了类下的其它可能被重写的方法怎么办? 假如show方法本身修改了了对象的属性怎么办? 怎么办怎么办你都不管了是不是!我才不要你的办法!
  • 打赏
  • 举报
回复
    public void show() {
       A a = new A();
        a.show();
        System.out.println("C");
    }

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧