Java如何调用盛大父母的方法?

可能重复:
为什么是super.super.method(); Java不允许?

假设我有3个ABC ,每个类都扩展了前一个。

如果B也实现myMethod如何从C.myMethod()调用A.myMethod()的代码?

 class A { public void myMethod() { // some stuff for A } } class B extends A { public void myMethod() { // some stuff for B //and than calling A stuff super.myMethod(); } } class C extends B { public void myMethod() { // some stuff for C // i don't need stuff from b, but i need call stuff from A // something like: super.super.myMethod(); ?? how to call A.myMethod(); ?? } } 

你不能。 这是故意的。

B类为子类提供了一个接口(如概念中,而不是Java关键字)。 它已经选择不直接访问A.myMethod的function。 如果您需要B来提供该function,那么请使用不同的方法(不同的名称,使其protected )。 然而,“更喜欢构图而不是inheritance”可能更好。

你不能,也不应该。

这是糟糕设计的标志。 重命名方法或在另一个方法或实用程序类中包含所需的常用function。

我不确定你能不能。 Java默认情况下使所有方法都是虚拟的 这意味着最简单的解决方案将不起作用:声明A类型的变量,将C实例分配给它并调用myMethod将导致调用C.myMethod

您可以尝试反映类型A并直接调用其方法。 看看在这种情况下会发生什么会很有趣,但如果虚拟调度不会发生我会感到惊讶……