[英]Why is the child class object invoking the parent class field variable in Java?
[英]Assign parent class to child class variable in Java
我有一個父類和若干子類的(我們姑且稱之為parent
和child1
, child2
, child3
等)。
我有一個函數,它采用parents
的二維數組並將其展平為一維數組,如下所示:
public parent[] flatten(parent[][] input);
在調用上下文中,我知道當我傳遞一個數組時,所有元素都具有相同的類型,並且該類型是子類型之一(特別是,我知道它是WHICH子類型)。 我希望能夠獲取數組的特定元素,並將其分配給正確的子類型的變量,如下所示:
child1 c = flatten(input)[0];
我知道類型斷言(相關SO帖子: 斷言對象是一種特定的類型 ),但是如果斷言成功,我似乎找不到實際分配給正確類型變量的方法。 在Java中這樣的事情是否可能? 我知道它可以用其他語言,例如Go。
你真的想把它分配給某些Child類型嗎? 如果方法也在Parent
類中定義,則可以使用Parent
類引用來訪問Child
類方法。
否則,您可以鍵入強制轉換為適當的類型:
child1 c = (child1)flatten(input)[0];
但是,您應該確保該類型僅為child1
。 通常,類型轉換不是一個好主意。 這是代碼不好的標志(但並非總是如此)。 你應該盡量避免它。
嘗試“鑄造”,像這樣:
Child1 c = (Parent)flatten(input)[0];
我認為值得一提的是,如果您不想使用異常處理,您可以檢查對象的實例。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof
TL; DR:檢查您要投射到的類的實例。
if (flatten(input)[0] instanceof child1)
Child1 c = (Parent)flatten(input)[0];
你不能分配通用數組 ,但是如果你願意傳遞一個out-param,你可以使用泛型來為你處理轉換:
public <T extends Parent> boolean addAll(T[][] input,
T[] output) {
//set up you indices
output[x] = input[z];
return true;
}
如果傳入不匹配的輸入/輸出,則會出現運行時錯誤,否則它應該正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.