如何从Super :: Super()调用Super :: printThree?
在下面的示例中,我改为调用Test :: printThree。
class Super {
Super() {
printThree(); // I want Super::printThree here!
}
void printThree() { System.out.println("three"); }
}
class Test extends Super {
int three = 3
public static void main(String[] args) {
Test t = new Test();
t.printThree();
}
void printThree() { System.out.println(three); }
}
output:
0 //Test::printThree from Super::Super()
3 //Test::printThree from t.printThree()
最佳答案
您不能-它是子类中已重写的方法;您不能强制执行非虚拟方法调用。如果要非虚拟地调用方法,请将该方法设为私有或最终方法。
通常,正是出于这个原因,在构造函数中调用非最终方法是一个坏主意-子类构造函数主体尚未执行,因此您实际上是在尚未完全实现的环境中调用方法初始化。
关于java - 来自基本构造函数的Java调用基本方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7223435/