下面有這個輸出。Java - 爲什麼重複調用方法被調用兩次(或者至少看起來是這樣)?
Hello World!
main.ConstructedDerivedClass:6.0
main.ConstructedDerivedClass:6.0
public class ConstructedDerivedClass extends ConstructedBase {
private static final double version = 6.0;
public static void main(String[] args) {
System.out.println("Hello World!");
ConstructedDerivedClass derivedClass = new ConstructedDerivedClass();
}
public ConstructedDerivedClass() {
showMyAttributes();
}
@Override
protected void showMyAttributes() {
System.out.println(this.getClass().getName() + ":" + version);
}
}
public class ConstructedBase {
private static final double version = 15.0;
public ConstructedBase() {
showMyAttributes();
}
protected void showMyAttributes() {
System.out.println(this.getClass().getName() + ":" + version);
}
}
我希望它只是顯示一條線,該子類(ConstructedDerivedClass)。但相反,它打印出來兩次。我知道一般情況下,你應該避免從構造函數中調用overriden方法,但我想親自看看這是如何工作的。
實際上,我知道爲什麼版本在兩行上都是'6.0' - 因爲字段被聲明爲靜態,當然靜態字段是首先初始化的。但仍然不明白爲什麼兩條線。
任何指導,將不勝感激。
這可能是一個重複的(但我沒有」但是即使是這樣,這是一個寫得很好的問題,它清楚地顯示了你感興趣的輸出,以及完整的代碼。做得好! –
謝謝。這仍然是新的。這兩個答案在下面有幫助。很難挑選一個。 –