我有一個有幾個變量的體育基類。我還有幾個不同的課程,如排球,足球等,有其他方法和變量。他們看起來有點像這樣。如何將派生類傳遞給接受父類型的函數
public class Sport {
public String commonVar;
public Sport(String c) {
this.commonVar = c;
}
}
然後排球:
public class Volleyball extends Sport {
public String onlyVolleyball;
public Volleyball(String c, String thisVar) {
super(c);
this.onlyVolleyball = thisVar;
}
}
現在我要路過體育的派生類到一個函數在其他地方,但使得參數
public otherFunction(int one, int two, Sport sport) { }
只有對待體育作爲運動對象(它會接受派生類,但是我不能訪問任何Sport不常見的變量和方法)。我的問題是如何創建一個函數,以便我可以發送所有類型的運動衍生物而不丟失任何數據?
我認爲這是我可能尋找的,有沒有辦法更自動地執行鑄造?我可以在運動中設置一個變量,如 'public class <?擴展體育> c;' 並在構造函數中從派生類中設置c。 – Ahorner
@Ahorner實際上,除了具有擴展類型參數的類(例如'ArrayList')之外,您不能動態轉換,因爲泛型聲明確保類型安全。如果你看看它的源代碼,你會看到'E'用來表示擴展類型,在'elementData()'方法中,該值被轉換爲'(E)elementData [index] ',但是這隻適用於這種情況,如果他們分享他們所有的方法。 (ArrayList soruce:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java) –
MrLore