Har*_*ish 35 java inheritance overriding
假设我有三个A,B和C类.
都有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(); }方法).
也就是说,如果你尝试这样的东西,它看起来像一个设计问题,所以给我们一些背景知识是有帮助的:为什么你需要这样做?
Jon*_*eet 20
你不能 - 因为它会破坏封装.
你可以调用你的超类的方法,因为它假设你知道什么打破了你自己的类中的封装,并避免...但你不知道你的超类强制执行什么规则 - 所以你不能绕过一个在那里实施.