Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaの共変戻り値型(共変リターンタイプ)とは?オーバーライドでの使い方を実例付きで解説

Javaのメソッドオーバーライドでは、通常、スーパークラスのメソッドとサブクラスのメソッドは同じ名前・同じパラメータを持つ必要があります。しかし、戻り値の型については例外があります。サブクラスでオーバーライドしたメソッドは、スーパークラスのメソッドの戻り値型の「サブタイプ」を返すことができます。これが共変戻り値型(covariant return type)と呼ばれる仕組みです。

共変戻り値型の仕組み

例えば、スーパークラスに demoMethod() というメソッドがあり、List 型の値を返すとします。このメソッドをサブクラスでオーバーライドする場合、戻り値の型として List(スーパークラスと同じ型)を指定しても問題ありませんし、List のサブタイプである ArrayList、Stack、Vector などを指定することも可能です。

このように、サブクラスのメソッドが、スーパークラスのメソッドの戻り値型(この例では List)のサブタイプ(ArrayList など)を返すケースにおいて、そのサブタイプのことを共変型(covariant type)と呼びます。

共変戻り値型のコード例

class Test{
    int data = 100;
    Test demoMethod(){
        return this;
    }
}
public class Sample extends Test{
    int data = 1000;
    Sample demoMethod(){
        return this;
    }
    public static void main(String args[]){
        Sample sam = new Sample();
        System.out.println(sam.demoMethod().data);
    }
}

実行結果

1000

この例では、スーパークラス Test の demoMethod() は Test 型を返しますが、サブクラス Sample でオーバーライドされた demoMethod() は、Test のサブタイプである Sample 型を返しています。そのため、sam.demoMethod() の呼び出し結果は Sample オブジェクトとなり、Sample クラス側の data フィールドの値「1000」が出力されます。

共変戻り値型を活用すると、呼び出し側でキャストを行わずに済み、より具体的な型を直接受け取れるため、コードの可読性と型安全性が向上します。なお、この機能は Java 5(JDK 1.5)以降でサポートされています。

  1. C言語の基本データ型を徹底解説!int・char・floatの種類とサイズ一覧

    C言語の基本データ型とは? C言語のコンパイラがサポートする基本データ型は、大きく分けて次の4つです。 整数型(Integer) 文字型(Character) 浮動小数点型(Floating-point) 倍精度浮動小数点型(Double precision floating point) プログラムで扱う値の種類(整数・文字・実数など)に応じて適切な型を選ぶことは、正確で効率的なコードを書くための第一歩です。なお、各データ型のサイズや表現できる値の範囲は、使用するコンパイラや実行環境によって異なる場合がある点に注意してください。 整数型(Integral Data Type) 整数型は

  2. Javaのpaint()メソッドとrepaint()メソッドの違いをわかりやすく解説

    JavaでGUIアプリケーションを開発する際、コンポーネントの描画に関わるpaint()メソッドとrepaint()メソッドは、役割がまったく異なる重要なメソッドです。この記事では、両者の違いと正しい使い方を具体例とともに解説します。 paint()メソッドとrepaint()メソッドの違い paint()メソッドとは paint()は、コンポーネントを実際に描画するための処理(描画命令)を記述するメソッドです。Java AWTでは、このメソッドをオーバーライドして独自の描画処理を実装します。 一方、Java SwingではpaintComponent()メソッドをオーバーライドするのが推奨さ