Java の共変戻り型
Java では、オーバーライドされたメソッドの戻り型は共変になる可能性があります。つまり、より派生したメソッドを返すことができます。オーバーライドされたメソッドよりもタイプが異なります。ただし、このルールは、オーバーライドされたメソッドによってスローされた例外には適用されません。
オーバーライド メソッドでの例外スローの制限
コンパイラは、例外に関してオーバーライドされたメソッドに対して次の制限を適用します。処理:
説明
これらの制限により、サブクラスがオーバーライドされたメソッドのインターフェイスに新しいチェック例外やより重大なチェック例外を導入できないことが保証されます。これは、スーパークラスに対して記述されたコードが例外を適切に処理できるようにするため、ポリモーフィズムに必要です。
例
次の例を考えてみましょう:
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 サイトの他の関連記事を参照してください。