调用超级超类方法

Har*_*ish 35 java inheritance overriding

假设我有三个A,B和C类.

  • B延伸A.
  • C延伸B.

都有public void foo()定义的方法.

现在从C的foo()方法我想调用A的foo()方法(不是它的父B的方法,而是超级超类A的方法).

我试过super.super.foo();,但这是无效的语法.我怎样才能做到这一点?

Lan*_*dei 32

你甚至不能使用反射.就像是

Class superSuperClass = this.getClass().getSuperclass().getSuperclass();
superSuperClass.getMethod("foo").invoke(this);
Run Code Online (Sandbox Code Playgroud)

会导致一个InvocationTargetException,因为即使你在superSuperClass上调用foo-Method,它仍会C.foo()在你在invoke中指定"this"时使用.这是因为所有Java方法都是虚方法.

看来你需要B类的帮助(例如通过定义superFoo(){ super.foo(); }方法).

也就是说,如果你尝试这样的东西,它看起来像一个设计问题,所以给我们一些背景知识是有帮助的:为什么你需要这样做?

  • 这不是我的要求。我只是在脑子里思考玩弄继承的所有可能性,然后得到了这个问题。谢谢..我得到了答案 (2认同)

Jon*_*eet 20

你不能 - 因为它会破坏封装.

你可以调用你的超类的方法,因为它假设你知道什么打破了你自己的类中的封装,并避免...但你不知道你的超类强制执行什么规则 - 所以你不能绕过一个在那里实施.

  • @Aaron:我不确定 Object.toString() - 你是否在考虑“System.identityHashCode”? (2认同)