如果我们已经拥有超类的子类,我们如何调用超类方法?

时间:2012-06-12 09:26:18

标签: java

我的问题是,如果有一个由父类扩展的子类,并且由祖父类扩展,那么子类如何直接访问祖父的方法。

2 个答案:

答案 0 :(得分:6)

最好通过一个例子说明:

public class GF {
    public void one() { ... }
    public void two() { ... }
}

public class F extends GF {
    public void two() { ... }
}

public class C extends F {
    public void one() {
        super.one(); // Calls one in GF
    }

    public void two() { 
        super.two(); // Calls two in F
    }
}

从子类中调用重写方法的语法是super.method(....)。但是你只能这样做来调用第一级重写方法。如果该方法本身是覆盖,则无法调用第二级覆盖;例如C.two()没有办法直接拨打GF.two()。你不能反思地做,甚至JVM字节码都不允许它。

答案 1 :(得分:1)

这取决于祖父的方法可见性。通常它可以像父亲的方法一样访问。如果你想跳过父方法覆盖祖父方法,你就不能在不修改父方法的情况下这样做。

调用祖父方法的唯一方法是:

public class GF {
    public void m() {
        //do something
    }
}

public class F {

    public void m() {
        //do something that you don't need in son
    }

    /* add this method for the clean access to GF*/
    public void gfM() {
        super.m();
    }
}

public class S {
    public void aMethod() {
        gfM(); //actually calls the GF.m() method
    }
}