Java具有協變返回類型的特性。這意味着子類在覆蓋/實現方法時可以指定方法返回類型的子類。它就像
public interface ModelInterface {
public ModelInterface getAll();
}
public class Object1 implements ModelInterface {
public Object1 getAll(){
// implement here
}
}
public class Object2 implements ModelInterface {
public Object2 getAll(){
// implement here
}
}
This tutorial提供了對協變返回類型的解釋。
假設您有一個類層次結構,其中ImaginaryNumber是java.lang.Number的子類,而它又是Object的子類。
現在假設你有聲明爲返回一個號碼的方法:
public Number returnANumber() {
...
}
的returnANumber方法可以返回一個ImaginaryNumber但不是一個對象。 ImaginaryNumber是一個數字,因爲它是Number的一個子類。但是,一個對象不一定是一個數字 - 它可能是一個字符串或其他類型。
您可以覆蓋的方法和限定它返回原來的方法的一個子類,如下所示:
public ImaginaryNumber returnANumber() {
...
}
這種技術,稱爲協變返回類型,意味着返回類型是允許在改變與子類相同的方向。
注意:您也可以使用接口名稱作爲返回類型。在這種情況下,返回的對象必須實現指定的接口。
最簡單的方法是使用Object和結果取決於實現接口的類... – nem035 2014-09-29 22:55:33