0

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

这是我的代码..假设我有三个类

public class ExtendsCheck {
    public void move() {
        System.out.println("M in Extends Check");
    }
}

public class ExtendsCheck2 extends ExtendsCheck{
    public void move() {
        System.out.println("M in Extends Check 2");
    }
}

public class ExtendsCheck3 extends ExtendsCheck2{
    public static void main(String[] args)
    {
        ExtendsCheck3 e3 = new ExtendsCheck3();
        e3.move();
    }   
}

当我调用e3.move()时,方法move()fromExtendsCheck2被调用。

我的问题是,如果我想调用ExtendsCheck类的move(),我该怎么做。

4

3 回答 3

0

要调用父方法,请super在继承方法中使用关键字。

例如对于 ExtendsCheck2 类的方法:

public void move() {
     super.move();
     System.out.println("M in Extends Check 2");

}

将显示:

M in Extends Check
M in Extends Check 2

如果您想直接从 ExtendsCheck3 类调用 ExtendsCheck 类的 move(),那么请重新考虑您的继承架构。如果你需要编写这样的代码,那么你的类的体系结构就会出错。

于 2012-08-16T05:29:51.980 回答
0

在一个类中,您可以使用parent.move();.

但是,没有这样的东西parent.parent.move();。原因是当父类被重构时,这会中断,例如插入一个抽象类,从而增加层次结构的深度。

最有可能的是,当您“需要”时parent.parent.method(),继承设计中的某些内容被破坏了,因为您似乎需要撤消父类的某些内容。

如果这真的很明智,您总是可以让父类提供“绕过”功能,例如

@Deprecated
protected void originalMove() {
    super.move();
}

这将移动操作再次与定义良好的父类联系起来。请注意,我不建议使用此. 最有可能的是,您设计中的某些内容已损坏。例如,您可能想在某处使用抽象类。

于 2012-08-16T05:33:10.327 回答
-2

最简单的处理方法是:

Extends E = new Extends();
E.move();

或者

super.move(); // as the first statement...
于 2012-08-16T05:50:23.427 回答