调用超超类方法

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();


答案 1

您甚至不能使用反射。类似的东西

Class superSuperClass = this.getClass().getSuperclass().getSuperclass();
superSuperClass.getMethod("foo").invoke(this);

将导致 一个 ,因为即使您在 superSuperClass 上调用 foo-Method,当您在 invoke 中指定 “this” 时,它仍然会使用。这是由于所有Java方法都是虚拟方法的结果。InvocationTargetExceptionC.foo()

似乎你需要B类的帮助(例如,通过定义一个方法)。superFoo(){ super.foo(); }

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


答案 2

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

你可以调用超类的方法,因为它假设你知道什么会破坏你自己的类中的封装,并避免这种情况......但是你不知道你的超类正在执行什么规则 - 所以你不能只是绕过那里的实现。


推荐