2013-10-10 39 views
0

我不想在名爲'dataItem'的超類中進行方法聲明,以便實現該方法的所有子類都必須具有實現類的返回類型。那可能嗎?超類中的方法聲明

例如,如果我有類'實驗'實現'dataItem',我有方法newItem()。 '實驗'應該只能返回'實驗'數據類型,而不能返回'數據項'的任何其他實現。

回答

1

您不能強制類方法返回它所屬的類型。你必須實際指定它。

public class DataItem { 
    public DataItem getItem() {return null;} 
} 

public class Experiment extends DataItem { 
    @Override 
    public Experiment getItem() {return null;} 
} 

這工作,因爲Experiment是子類的DataItem,因此可以在任何地方使用的DataItem都可以使用。

1

我想你正在尋找這樣的:

public interface dataitem<T> 
{ 
    public T newItem(); 
}; 

public class Element implements dataitem<Element> 
{ 
    @Override 
    public Element newItem() 
    { 
     return new Element(); 
    } 
} 
+0

事實上,這是一個可能的解決方案。我只是想知道爲什麼有人會這樣做。 @numfar,你能向我們解釋爲什麼你想要這個嗎? – Trein

+0

@Trein對於迭代器很有用,例如,你可以用抽象類型T定義接口,然後所有的子類必須實現正確的功能 –