Java如何调用盛大父母的方法?
可能重复:
为什么是super.super.method(); Java不允许?
假设我有3个A
, B
和C
,每个类都扩展了前一个。
如果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
并直接调用其方法。 看看在这种情况下会发生什么会很有趣,但如果虚拟调度不会发生我会感到惊讶……