メソッドのオーバーロード: オーバーライドと同等のメソッドに対する Java の制限
Java では、パラメーターが異なるにもかかわらず、同じ消去を持つ 2 つのメソッドがクラス内に存在することを禁止しています。種類。この制約は、生の型を利用して従来のコードとの互換性を維持しようとする言語の取り組みから生じています。
add(Set
この制限は、クラスが raw を使用してスーパークラスから継承する状況での競合を回避するために存在します。種類。このような場合、コンパイラーは、適切なメソッドのオーバーライドを保証するために、生の型を生成された型と同等のオーバーライドとして扱う必要があります。
たとえば、生の型を使用するメソッド toList(Collection c) を持つ従来のクラス CollectionConverter を考えてみましょう。このクラスを拡張して新しいメソッド toList(Collection
ただし、後で誤って 3 番目のメソッド toList(コレクション c) をサブクラスに追加する場合、コンパイラーはどのメソッドをオーバーライドするかを決定できないため、あいまいさに直面します。このあいまいさを解決するために、Java は複数のオーバーライドに相当するメソッドに対してルールを適用します。
この制限は消去の制限ではなく、既存のコードとの互換性をサポートするために行われた設計上の選択であることに注意することが重要です。メソッド識別子にジェネリックスを追加すると、このルールを必要とせずにコンパイル時に一意性を確保することが可能でした。それにも関わらず、Java は互換性のためにこの制限を維持しています。
以上がJava がオーバーライドと同等のメソッドによるメソッドのオーバーロードを制限するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。