我以爲你不能將Parent
轉換爲Child
,並且只能將Child
轉換爲Parent
。或者至少如果你這樣做,你將不被允許訪問孩子的功能。將父母給予孩子 - 數組中的奇怪行爲
然後我看到,Java將允許我明確投父到子:
a=(B)a;
,但不會允許
bArray[0]=a
或
a.testB();
然而,這是確定的:
bArray[1]=(B)a;
所以是這樣的:
bArray[1].testB();
可有人請解釋一下是怎麼回事!?如何給父類授予一個子類的功能?爲什麼第一次嘗試將數組放入陣列不起作用,但第二次嘗試呢?它不應該一樣嗎?
class A {
public void testA() {
}
}
class B extends A {
public void testB() {
}
}
public class polymorphicObjects {
public static void main(String[] args) {
B bArray[] = new B[5];
A a = new A();
A ab = new B();
a = (B)a; //didnt think you could do this
bArray[0] = a; //but if I can the why doesnt this work?
a.testB(); //or this
bArray[1] =(B)a; //but this does work
bArray[1].testB(); //and so does this!?
}
}
** //爲什麼不工作?** - 因爲您聲明'a'是A型的,所以不要緊。 'A a =(B)new A();'。變量'a'仍然是'A'類型,因爲那是你如何定義它的。無論如何。我確定其實這些都不起作用,如果你嘗試運行它,你只會得到一個ClassCastException。僅僅因爲它編譯不會意味着它有效。 –
哈是類演員異常。我正在爲OCJA學習,他們一直在向我拋出奇怪的東西。沒想到打編譯。謝謝你,先生。 – Mason