トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

SJC-P 共変戻り値



目次



記事一覧

キーワード

SJC-P 共変戻り値

 共変戻り値(covariant return types)

http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.4.5

  • 以前のバージョンでは許されていなかった
  • オーバーライドの制限をゆるくする

以前のバージョンでオーバーライドをする場合、戻り値を含めシグネチャが完全に一致している必要があったが、Java5からは、戻り値については、オーバーライドされるメソッドの戻り値のサブクラスを戻すことが可能になった。

package returntype;

public class ConvariantReturnTypeTest1 {

    public static void main(String[] args) {
        ConvariantReturnTypeTest1 me = new ConvariantReturnTypeTest1();
        me.testReturnType();
    }
    public void testReturnType() {
        try {
            Base b1 = new Base(999);
            Base b2 = b1.clone();  // ダウンキャスト不要
            System.out.println(b2.id);
            
            Deriv d1 = new Deriv(888);
            Base  b3 = d1.clone();
            System.out.println(b3.id);
            
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}
class Base implements Cloneable {
    protected int id;
    public Base(int id) {
        this.id = id;
    }
    // Object.clone() (戻り値はObject)をオーバーライドして、戻り値をサブクラスとできる
    protected Base clone() throws CloneNotSupportedException {
        return new Base(this.id);
    }
}
class Deriv extends Base {
    public Deriv(int id) {
        super(id);
    }
    protected Deriv clone() throws CloneNotSupportedException {
        return new Deriv(this.id);
    }
}


指定されたパートは存在しません。



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.