簡體   English   中英

Java 向上轉換和向下轉換以及繼承

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM