次のコードを実行すると、結果が得られました:
クラス A の
メソッド クラス Bのメソッド。
public class Test {
static class A {
public A() {
someMethod();
}
public void someMethod() {
System.out.println("method from class A");
}
}
static class B extends A {
public void someMethod() {
System.out.println("method from class B");
}
}
public static void main(String... args) {
new A();
new B();
}
}
結果の 1 行目は明確ですが、2 行目は明確ではありません。クラス A のコンストラクターが、クラス B のオーバーライドされたメソッドではなく、クラス A で定義されたメソッドを呼び出さなかったのはなぜですか? コンパイル後、コンストラクター A のコードがクラス B にコピーされ、実際にクラス B からメソッドを呼び出すことができるでしょうか?