問題:
class A{
int sum;
}
class B extends A{
double sum;
public static void main(String args[]){
A a=new A();
B b=new B();
b=(A)a;//異常?請教why?
}
}
回答:
形象一點說:
class 人{
int sum;
}
class 男人 extends 人{
double sum;
public static void main(String args[]){
人 a=new 人();
男人 b=new 男人();
b=(男人)a;
}
}
你能把“人”強制轉換成“男人”嗎??很顯然不能
所謂“父類向子類轉換是強制轉換”是指這種情況
A a=new B();
B b=(B)a;
此時a實際上是一個B的實例,但被定義為A,這樣就無法調用B中定義的方法,只有在強制轉換為B的實例后才能調用B中定義的方法——前提是:a是B的實例
如果是
A a=new A();
B b=new B();
b=(A)a;
a本身是A的實例,不具有B的特征,不可能轉換為B的實例。
這就像你不能
Object obj=new Object();
String str = (String)obj;