質問: 最終的な静的メソッドの動作 私は静的メソッドで修飾子をいじくり回していて、奇妙な動作に遭遇しました。知っているように、静的メソッドはインスタンスではなくクラスに関連付けられているため、オーバーライドできません。以下のスニペットがあれば、うまくコンパイルできます//snippet 1 - compiles fine public class a { static void ts() { } } class b extends a { static void ts() { } } しかし、クラスaのstaticメソッドにfinal修飾子を含めると、コンパイルは失敗しますbのts()はaのts()をオーバーライドできません;オーバーライドされたメソッドはstatic finalです。静的メソッドをまったくオーバーライドできないのに、なぜこれが起こるのですか?
回答: ここで、コンパイルエラーは非常に誤解を招くものだったと思います。 「オーバーライドされたメソッドは静的なファイナルです」と言ってはいけませんが、代わりに「オーバーライドされたメソッドはファイナルです」と言っているべきです。静的修飾子はここでは無関係です。