ホームページ >Java >&#&チュートリアル >Java がオーバーライドと同等のメソッドによるメソッドのオーバーロードを制限するのはなぜですか?

Java がオーバーライドと同等のメソッドによるメソッドのオーバーロードを制限するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-13 09:25:14277ブラウズ

Why Does Java Restrict Method Overloading with Override-Equivalent Methods?

メソッドのオーバーロード: オーバーライドと同等のメソッドに対する Java の制限

Java では、パラメーターが異なるにもかかわらず、同じ消去を持つ 2 つのメソッドがクラス内に存在することを禁止しています。種類。この制約は、生の型を利用して従来のコードとの互換性を維持しようとする言語の取り組みから生じています。

add(Set) や add(Set など) パラメータの型が異なる 2 つのメソッドを使用すると、コンパイル エラーが発生します。 ;)、同じクラス内で共存しようとします。 Java は、これらのメソッドに同じ「消去」があると見なします。これは、コンパイル中にジェネリック型パラメーターが削除された後のメソッド シグネチャを指します。

この制限は、クラスが raw を使用してスーパークラスから継承する状況での競合を回避するために存在します。種類。このような場合、コンパイラーは、適切なメソッドのオーバーライドを保証するために、生の型を生成された型と同等のオーバーライドとして扱う必要があります。

たとえば、生の型を使用するメソッド toList(Collection c) を持つ従来のクラス CollectionConverter を考えてみましょう。このクラスを拡張して新しいメソッド toList(Collection c) を追加すると、どちらのメソッドもオーバーライドと同等になり、オーバーライド要件を満たします。

ただし、後で誤って 3 番目のメソッド toList(コレクション c) をサブクラスに追加する場合、コンパイラーはどのメソッドをオーバーライドするかを決定できないため、あいまいさに直面します。このあいまいさを解決するために、Java は複数のオーバーライドに相当するメソッドに対してルールを適用します。

この制限は消去の制限ではなく、既存のコードとの互換性をサポートするために行われた設計上の選択であることに注意することが重要です。メソッド識別子にジェネリックスを追加すると、このルールを必要とせずにコンパイル時に一意性を確保することが可能でした。それにも関わらず、Java は互換性のためにこの制限を維持しています。

以上がJava がオーバーライドと同等のメソッドによるメソッドのオーバーロードを制限するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。