共変戻り値

検証

  • オーバーライドしたメソッドの戻りは、サブクラスの型でもよい
    • 共変戻り値?

つまりこういうこと。


戻り値で使うクラス

public class BeanA {}

public class BeanB extends BeanA {}

オーバーライドするクラス

public class RiderA {
  BeanA getBean(){
    return new BeanA();
  }
}

public class RiderB extends RiderA{
  @Override //つまりオーバーライドしている
  BeanB getBean(){
    return new BeanB();
  }
}

実行

public class Test {
  public static void main(String[] args) {
    RiderA rider = new RiderB();
    BeanA bean = rider.getBean();
    
    System.out.print(bean.getClass());
  }
}

結果

class hoge.override2.BeanB