オーバーライドではありません。それが機能した場合でも、オーバーライドが発生した場合とは異なり、代わりにthis.toString()
のメソッドにアクセスします。A
Arrays.toString
言語仕様では、静的インポートはstatic
メソッドと型の解決にのみ影響すると説明されています。
n という名前のフィールドをインポートする、パッケージ p のコンパイル ユニット c 内の single-static-import 宣言 d は、c 内の static-import-on-demand 宣言によってインポートされた n という名前の静的フィールドの宣言を c 全体にわたって隠します。
シグネチャ s を持つ n という名前のメソッドをインポートする、パッケージ p のコンパイル ユニット c 内の単一静的インポート宣言 d は、c の静的インポート オンデマンド宣言によってインポートされるシグネチャ s を持つ n という名前の静的メソッドの宣言をシャドウします。 、c全体を通して。
n という名前の型をインポートするパッケージ p のコンパイル ユニット c 内の single-static-import 宣言 d は、次の宣言をシャドウします。
- c の static-import-on-demand 宣言によってインポートされた n という名前の任意の静的型。
- p の別のコンパイル単位 (§7.3) で宣言された n という名前の最上位の型(§7.6)。
- c の type-import-on-demand 宣言 (§7.5.2) によってインポートされたn という名前の任意の型。c。
静的インポートは、非静的メソッドまたは内部型をシャドーしません。
したがって、toString
は非静的メソッドをシャドーしません。名前toString
は の非静的メソッドを参照できるため、 のメソッドを参照A
できず、スコープ内で使用できる名前付きの唯一のメソッドである にバインドされます。そのメソッドは引数を取ることができないため、コンパイル エラーが発生します。 static
Arrays
toString
toString
String toString()
セクション 15.12.1はメソッドの解決について説明しており、メソッド内ではなくメソッド内で使用できないメソッド名をシャドウできるように完全に書き直す必要がstatic
ありmember
ます。
私の推測では、言語設計者はメソッド解決規則を単純に保ちたいと考えていたのでしょう。つまり、同じ名前は、static
メソッドに表示されるかどうかに関係なく同じことを意味し、変更されるのはどれが使用可能かだけです。