1. 程式人生 > >Java中父類與子類的轉換問題

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 
3     public static void main(String[] args) {
4         B b =  new
B(); 5 A a = new B(); 6 b = (B) a; 7 } 8 9 }

這段程式碼也是我初學時很納悶的地方,但仔細想想就理解了,先看第5行程式碼,父類A由子類B建立的,之後第6行程式碼,子類物件b由父類物件強制轉換而來

這就好比,首先說明了這個動物物件是狗建立的,然後說這個動物就是狗,所以邏輯上沒問題,實際上也沒問題。

這是我第一次發博文,可能在佈局上有很多不足之處,歡迎指出,在內容上也有不足或者錯誤的地方也歡迎指出,大家互相交流,才能更好地互相學習。