ホームページ > Java > &#&チュートリアル > Java オーバーライドされたメソッドは共変の戻り値を持つことができますか?また、例外処理にはどのような制限がありますか?

Java オーバーライドされたメソッドは共変の戻り値を持つことができますか?また、例外処理にはどのような制限がありますか?

Barbara Streisand
リリース: 2024-12-02 13:42:15
オリジナル
365 人が閲覧しました

Can Java Overridden Methods Have Covariant Return Types, and What Are the Restrictions on Exception Handling?

Java の共変戻り型

Java では、オーバーライドされたメソッドの戻り型は共変になる可能性があります。つまり、より派生したメソッドを返すことができます。オーバーライドされたメソッドよりもタイプが異なります。ただし、このルールは、オーバーライドされたメソッドによってスローされた例外には適用されません。

オーバーライド メソッドでの例外スローの制限

コンパイラは、例外に関してオーバーライドされたメソッドに対して次の制限を適用します。処理:

  • オーバーライドされたメソッドは new または
  • オーバーライドされたメソッドは、より狭い例外または新しい非チェック例外をスローできます。

説明

これらの制限により、サブクラスがオーバーライドされたメソッドのインターフェイスに新しいチェック例外やより重大なチェック例外を導入できないことが保証されます。これは、スーパークラスに対して記述されたコードが例外を適切に処理できるようにするため、ポリモーフィズムに必要です。

次の例を考えてみましょう:

class A {
    public void foo() throws FileNotFoundException {
        // ...
    }
}

class B extends A {
    @Override
    public void foo() throws SQLException { // ERROR: broader checked exception
        // ...
    }
}
ログイン後にコピー

この例では、クラス A が FileNotFoundException をスローするメソッド foo を定義しています。 A を拡張したクラス B は、より広範なチェック例外 SQLException を宣言することで foo をオーバーライドしようとします。これは、例外スローの制限に違反するため許可されません。

根拠

コンパイラは、次の目的でこれらの制限を強制します。

  • コントラクトを保持します: オーバーライドされたメソッドのインターフェイスは、既存のコードを壊すような方法で変更しないでください。
  • オブジェクト置換を確実にする: サブクラスのオブジェクトはスーパークラスのオブジェクトと置換可能である必要があり、これには例外を適切に処理することが含まれます。

以上がJava オーバーライドされたメソッドは共変の戻り値を持つことができますか?また、例外処理にはどのような制限がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート