调用超超类方法
2022-09-01 01:00:26
假设我有三个类A,B和C。
- B 扩展 A
- C 扩展 B
所有这些都定义了方法。public void foo()
现在,从C的方法中,我想调用A的方法(不是其父级B的方法,而是超超类A的方法)。foo()
foo()
我试过了,但它的语法无效。我怎样才能做到这一点?super.super.foo();
假设我有三个类A,B和C。
所有这些都定义了方法。public void foo()
现在,从C的方法中,我想调用A的方法(不是其父级B的方法,而是超超类A的方法)。foo()
foo()
我试过了,但它的语法无效。我怎样才能做到这一点?super.super.foo();
您甚至不能使用反射。类似的东西
Class superSuperClass = this.getClass().getSuperclass().getSuperclass();
superSuperClass.getMethod("foo").invoke(this);
将导致 一个 ,因为即使您在 superSuperClass 上调用 foo-Method,当您在 invoke 中指定 “this” 时,它仍然会使用。这是由于所有Java方法都是虚拟方法的结果。InvocationTargetException
C.foo()
似乎你需要B类的帮助(例如,通过定义一个方法)。superFoo(){ super.foo(); }
也就是说,如果你尝试这样的东西,它看起来像一个设计问题,所以给我们一些背景知识会很有帮助:为什么你需要这样做?
你不能 - 因为它会破坏封装。
你可以调用超类的方法,因为它假设你知道什么会破坏你自己的类中的封装,并避免这种情况......但是你不知道你的超类正在执行什么规则 - 所以你不能只是绕过那里的实现。