2 回答

TA貢獻(xiàn)1836條經(jīng)驗 獲得超3個贊
在這段代碼中:
Parent parentObject = new Child();
((Child)parentObject).childMember = 5;
該parentObject對象的實際/運行時類Child,這解釋了為什么所有的作品。
但是 parentObject 如何為 childMember 存儲值,因為它是 Parent 類型,而 parent 沒有 childMember?
這個問題更適用于這段代碼:
Parent parentObject = new Parent();
((Child)parentObject).childMember = 5;
但是,在這種情況下,強制轉(zhuǎn)換((Child)parentObject)將不起作用,并且 Java 將ClassCastException在運行時引發(fā) a ,正如您所期望的那樣。

TA貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊
首先,引用是 type Parent,它指向的對象是 type Child,因此您的整個邏輯在另一個答案中詳細(xì)說明。
但這是一個非常簡單的例子,讓我們做一個更有趣的例子:
static class Parent {
public int x = 5;
}
static class Child extends Parent {
public int x = 3;
}
有多少x的不Child呢?出色地...
Arrays.stream(Child.class.getFields())
.map(Field::getName)
.forEachOrdered(System.out::println); // x AND x again
那么你如何訪問它們中的每一個?
Child c = new Child();
System.out.println(c.x); // 3
Parent p = c;
System.out.println(p.x); // 5
添加回答
舉報