2016-06-10 109 views
0

爲什麼不能將o1(C1是C3的超類)轉換爲C3(C1的子類)?爲什麼我在這裏得到一個ClassCastException?

interface I1 { } 
interface I2 { } 
static class C1 implements I1 { } 
static class C2 implements I2 { } 
static class C3 extends C1 implements I2 { } 
static class C5 extends C1 implements I2 {} 




public static void main(String[] args) { 
    C1 o1 = new C1(); 
    C2 o2 = new C2(); 
    C3 o3 = new C3(); 
    C5 o5 = new C5(); 
    o3 = (C3) o1; 
} 
+1

因爲O1不包含一些執行/信息O3已經/需要(這是從I2繼承)這個例子,不是嗎? – kosa

回答

2

每個C3是一個C1,但不是每個C1都是C3。您正嘗試將C1的實例轉換爲C3

目光從文檔

Object x = new Integer(0); 
System.out.println((String)x); 
相關問題