私はこのデモコードを持っています:
class Test2 extends Test {
public int number = 0;
@Override
public void set(){
number = 1;
info();
}
@Override
public void info(){
System.out.println(number);
}
}
public class Test {
public Test(){
set();
}
public void set(){
}
public void info(){
}
public static void main(String[] args){
Test2 object = new Test2();
object.info();
}
}
コードは次の出力を提供します。
1
0
なんで?私はこの出力を期待しています:
1
1
私の意見では、メイン関数は Test2 クラスのコンストラクターを呼び出してオブジェクトを作成します。コンストラクターは、スーパークラスのコンストラクターを自動的に呼び出します。このコンストラクターは、オーバーライドされるメソッド set() を呼び出します。したがって、クラス Test2 のメソッド set() が呼び出されます。このメソッドはフィールドを設定し、数値を書き込む info() メソッドを呼び出します。次に、メイン関数は、作成されたオブジェクトの info() メソッドを再度呼び出します。
最初の行の出力が「1」であるため、数値フィールドは正しく設定されています。しかし、なぜ 2 行目に 0 が含まれているのでしょうか。フィールドがまったく設定されていないようです。説明できますか?
期待どおりの動作を得るにはどうすればよいですか? 前もって感謝します!