0
對象類型轉換的問題我有一個關於在Java類型轉換問題如下:關於Java的
假設我有一個類:
class A { public void m() }
現在我做:
A a1 = new A(); // (1)
a1.m(); // (2)
Object o = new A(); // (3)
o.m(); // (4)
我們可以將行(1)表示爲:a1
包含新對象A()
(在Heap中創建)的內存地址。所以第(2)行肯定是好的。
我們也可以將行(3)說成:o
包含新對象A()
(也在堆中創建)的內存地址。但是行(4)顯然不能被編譯,因爲Object類沒有m()方法。
但是爲什麼a1
包含對象A()
的地址,並且它能「看到」m()
方法;而o
也包含對象A()
的地址,但它「看不見」m()
方法?
有沒有其他解釋? (除了Object
類沒有m()
方法的原因)。
謝謝大家。
非常感謝您的回答。我還有一個。如果我寫((A)o).m() - >這完全沒問題。所以,我不確定鑄件((A)o)究竟做了什麼(內存中發生了什麼),以便在編譯時可以看到m()。 – ipkiss 2010-10-10 04:10:54
@ipkiss - 內存中沒有任何反應。投射對於CPU來說有一點開銷,因爲運行時必須決定是否可以投射對象,或者拋出異常 – Bozho 2010-10-10 07:39:00