非繼承關系的類之間對象類型不可以互相類型轉換,只有繼承關系才可以互相轉換。
簡單說,對象類型轉換的前提要是繼承關系。
對象類型轉換分為:向上轉型和向下轉型。多態就是一種自動向上轉型。
- 向上轉型:子類對象用父類類型接收(多態)。
- 向下轉型:父類類型轉換為子類類型。
例如:
class A {
}
class B extends A {
}
class D {
}
自動向上轉型:
A a = new B();
強制向下轉型:
A a = new B();
B b = (B)a;
錯誤演示:
A a = new D();
//或
A a = new A();
D d = (D)a; //編譯錯誤
為了避免錯誤的轉換,我們可以在轉換之前可以使用instanceof
判斷是否可以轉換。
public void test(A a) {if(a instanceof B) {B b = (B)a;}
}