Java中父類與子類的轉換問題
自己在自學安卓,學的過程中遇到了不少困難,從中意識到自己的java知識不夠紮實而導致,為此分享一下自己的java知識,一來是鞏固知識,二來是給一些也在學java的同學共享共享!
首先先看個例子:
class A { public A() { } } class B extends A { public B() { super(); } }
不難理解,上面定義了兩個類,一個是類A,一個是有A派生而來的類B
在看下面的程式碼:
public class TestDemo { public static void main(String[] args) { B b =new B(); A a = new A(); a = b; } }
這段程式碼也不難理解,父類要賦值給子類必須要強轉,這就好比,狗(子類)是動物(父類)一樣。
接下來才是我要講的重點:
public class TestDemo { public static void main(String[] args) { B b =new B(); A a = new A(); b=(B) a; } }
這段程式碼在編譯時期看不出有什麼錯誤,但執行時卻報錯了:
Exception in thread "main" java.lang.ClassCastException: com.laowu.A cannot be cast to com.laowu.B
報錯說:A類不能轉換成B,這就好比:動物(父類)是狗(子類)一樣,不合邏輯。
但是下面這段程式碼編譯和執行都不會出錯:
1 public class TestDemo { 2 3public static void main(String[] args) { 4B b =new B(); 5A a = new B(); 6b = (B) a; 7} 8 9 }
這段程式碼也是我初學時很納悶的地方,但仔細想想就理解了,先看第5行程式碼,父類A由子類B建立的,之後第6行程式碼,子類物件b由父類物件強制轉換而來
這就好比,首先說明了這個動物物件是狗建立的,然後說這個動物就是狗,所以邏輯上沒問題,實際上也沒問題。
這是我第一次發博文,可能在佈局上有很多不足之處,歡迎指出,在內容上也有不足或者錯誤的地方也歡迎指出,大家互相交流,才能更好地互相學習。