0

次のコードを実行すると、結果が得られました:

クラス 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 からメソッドを呼び出すことができるでしょうか?

4

1 に答える 1

3

2 番目のオブジェクトは B 型であるため、メソッドsomeMethodがコンストラクターで呼び出されると、このメソッドの最後のメソッド宣言が type に使用されBます。

于 2012-05-13T00:11:01.360 に答える