用一句話說就是
A繼承B並重寫B的方法,A所重寫的方法的返回值本來必須和B中被重寫方法保持一樣,但是現在可以返回B返回值的子類
舉例說明
假設有A、B、C、D四個類
B繼承A D繼承C
如果A中有個方法如下
A:
public C f() { //方法f()的返回值是C類型
return new C();
}
現在B繼承了A 要重寫A的f()方法.它的返回值也得是C java5以前就是這樣的規定
B:
@Override
public C f() {
return new C(); //重寫後也必須返回值保持相同只能返回C
}
這個時候這個協變返回類型作用出現了
B:
@Override
public C f() { //雖然方法表達式中返回值類型寫的還是C看左邊,但是依舊可以返回C的子類,這就是協變返回
return new D(); //B重寫A中的方法,但是返回值卻是D,不是說必須返回值一致嗎?憑什麼你就敢返回D了呢?
//就憑D是C的子類.我就可以返回~~這就是協變返回
}