[英]Java upcasting and downcasting and inheritance
假設有一個超類和兩個子類。
為什么 Java 不允許這種情況:
B -> A (A is superclass of class B)
C -> A
ObjectC c = (ObjectC)(ObjectA)b;
這樣我就可以將公共屬性從對象 b 映射到對象 c。
使用(ObjectA)b
您有一個表達式,如果計算結果為 ObjectA (ObjectA ab = (ObjectA)b) 類型的引用。 實例化對象的實際類型(在內存中)不會改變,只有你持有它的句柄(引用)會改變。 您不能將該引用轉換為ObjectC
,因為基礎對象實例(最初為 b)的類型為ObjectB
。
假設我們允許您在問題ObjectC c = (ObjectC)(ObjectA)b
所寫的內容。 如果你評估你會得到一個 ObjectC 類型的引用到實例化的對象 b。 假設 ObjectC 有一個名為 run() 的方法,但當然,ObjectB 不必有 run() 方法。 當你調用c.run()
會發生什么?
如果要將公共屬性從對象 b 映射到對象 c,則必須使用它們的公共基類並將公共屬性放在那里。
編輯有更好的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.