我的问题是,如果有一个子类由父类扩展并且由祖父类扩展,那么子类如何直接访问祖父的方法。
问问题
729 次
2 回答
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 字节码也不允许这样做。
于 2012-06-12T09:43:12.070 回答
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
}
}
于 2012-06-12T09:29:11.697 回答