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

Java 如果我们已经有一个子类的超类,我们如何调用一个超类方法?,java,Java,我的问题是,如果有一个子类由父类扩展,而子类由父类扩展,那么子类如何直接访问父类的方法。这取决于父类的方法可见性。一般来说,它可以像父亲的方法一样使用。如果要跳过父方法的父方法重写,则必须修改父方法 调用祖父方法的唯一方法如下: public class GF { public void m() { //do something } } public class F { public void m() { //do something

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

这取决于父类的方法可见性。一般来说,它可以像父亲的方法一样使用。如果要跳过父方法的父方法重写,则必须修改父方法

调用祖父方法的唯一方法如下:

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
    }
}

通过一个例子可以最好地说明这一点:

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(..)
。但您只能这样做来调用第一级重写方法。如果该方法本身是重写,则不能调用第二级重写;e、 g.
C.two()
无法直接调用
GF.two()
。您不能反射地执行此操作,甚至JVM字节码也不允许。

与子类如何调用其方法相同。这个问题是相关的:您不能,也不应该。它破坏了封装。如果父类不希望其子类访问祖父母类,然后,这是父类契约的一部分。如果未声明为私有,它可以访问任何方法。@Quoi它可以访问任何未声明为私有且未被父类重写的方法。可见性是公共的,但当我们使用super类方法时,我们使用super关键字,但在这种情况下,我们将使用什么来访问祖父的方法方法。可能有某种方法可以从F调用direclty GF方法class@VinitKumarKamboj-是的。与C.two()调用F.two()的方式相同。我只是没有表现出。。。因为这不是这个例子的重点。