如何在java中调用父类的父方法?

时间:2012-08-16 05:21:31

标签: java

  

可能重复:
  Why is super.super.method(); not allowed in 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()的方法ExtendsCheck2会被调用。

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

3 个答案:

答案 0 :(得分: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(),请重新考虑继承体系结构。如果您需要编写此类代码,那么您的类的体系结构就会出错。

答案 1 :(得分:0)

在课程中,您可以使用parent.move();

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

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

如果这是非常明智的,你可以随时让父类提供“旁路”功能,例如

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

将移动操作再次绑定到明确定义的父类。请注意我不建议使用此。最有可能的是,你设计中的某些东西被打破了例如,您可能希望在某处使用抽象类。

答案 2 :(得分:-2)

最简单的处理方式是:

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

super.move(); // as the first statement...