0
我不想在名爲'dataItem'的超類中進行方法聲明,以便實現該方法的所有子類都必須具有實現類的返回類型。那可能嗎?超類中的方法聲明
例如,如果我有類'實驗'實現'dataItem',我有方法newItem()。 '實驗'應該只能返回'實驗'數據類型,而不能返回'數據項'的任何其他實現。
我不想在名爲'dataItem'的超類中進行方法聲明,以便實現該方法的所有子類都必須具有實現類的返回類型。那可能嗎?超類中的方法聲明
例如,如果我有類'實驗'實現'dataItem',我有方法newItem()。 '實驗'應該只能返回'實驗'數據類型,而不能返回'數據項'的任何其他實現。
您不能強制類方法返回它所屬的類型。你必須實際指定它。
public class DataItem {
public DataItem getItem() {return null;}
}
public class Experiment extends DataItem {
@Override
public Experiment getItem() {return null;}
}
這工作,因爲Experiment
是子類的DataItem
,因此可以在任何地方使用的DataItem
都可以使用。
我想你正在尋找這樣的:
public interface dataitem<T>
{
public T newItem();
};
public class Element implements dataitem<Element>
{
@Override
public Element newItem()
{
return new Element();
}
}
事實上,這是一個可能的解決方案。我只是想知道爲什麼有人會這樣做。 @numfar,你能向我們解釋爲什麼你想要這個嗎? – Trein
@Trein對於迭代器很有用,例如,你可以用抽象類型T定義接口,然後所有的子類必須實現正確的功能 –