ここでは何もオーバーライドしませんでした。自分で確認するには、クラスの@Override前に注釈を入れてみてください。Java はエラーをスローします。public static void a()B
Bというクラスの関数を定義したところです。これは、クラスの関数a()とは異なります (まったく関係がありません) 。a()A
しかしB.a()、親クラスの関数と同じ名前を持っているため、 [Eng が指摘したように非表示にします。 A.a()フード]。実行時に、コンパイラは宣言された参照の実際のクラスを使用して、実行するメソッドを決定します。例えば、
B b = new B();
b.a() //prints B.a()
A a = (A)b;
a.a() //print A.a(). Uses the declared reference's class to find the method.
Java では静的メソッドをオーバーライドできません。メソッドstaticとフィールドは、オブジェクトではなくクラスに関連付けられていることに注意してください。(ただし、Smalltalk などの一部の言語では、これが可能です)。
私はここでいくつかの良い答えを見つけました:なぜ Java は静的メソッドのオーバーライドを許可しないのですか?