Java での静的メソッドの継承
Java の継承に関するドキュメントでは、メンバーがアクセシビリティに基づいて継承されることが説明されています。ただし、静的メソッドに関しては矛盾があるようです。
ドキュメントによると、静的メソッドは継承されません。しかし、次のコードは、サブクラスで静的メソッドにアクセスできることを示しています:
class A { public static void display() { System.out.println("Inside static method of superclass"); } } class B extends A { public void show() { // This works - accessing display() by its simple name - // meaning it is inherited according to the book. display(); } }
これはどのようにして可能ですか?
その答えは、Java の基礎となる継承の実装にあります。アクセス可能なすべてのメソッドは、そのタイプ (静的またはインスタンス) に関係なく、サブクラスによって継承されます。ただし、静的メソッドとインスタンス メソッドの継承には微妙な違いがあります。
同じシグネチャを持つ新しい静的メソッドがサブクラスで定義される場合、古い静的メソッドはオーバーライドされずに隠蔽されます。これは、サブクラスから呼び出された場合には、新しい静的メソッドが優先されることを意味します。ただし、元の静的メソッドには引き続きスーパークラス名を使用してアクセスできます。
対照的に、インスタンス メソッドがサブクラスでオーバーライドされると、新しいインスタンス メソッドが古いインスタンス メソッドを完全に置き換えます。これが、継承されたインスタンス メソッドがサブクラス内の単純名でアクセスできない理由です。
したがって、静的メソッドは Java ドキュメントで継承されるものとして明示的に言及されていませんが、他のすべてのアクセス可能なメンバーとともに暗黙的に継承されます。静的メソッドの継承における唯一の違いは、サブクラス内の同じシグネチャを持つ静的メソッドによって静的メソッドを非表示にできることです。
以上がJavaでは静的メソッドは継承されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。