2013-05-04 88 views
1

當我有THES代碼:符合類型不匹配:不能從ASuperClass轉換爲ASubClass

ASuperClass super1 = new ASuperClass(); 
ASubClass sub1 = new ASubClass(3); 
sub1 = (ASubClass) super1; // this line compiled ok BUT has runtime Error LINE 3 
ASubClass sub2 = new ASuperClass(); // this line compiled NOT ok LINE 4 

我的問題是,爲什麼在3線的錯誤(「ASuperClass不能轉換到ASubClass」)3運行時錯誤但不是編譯錯誤類似於第4行中的錯誤,這是一個編譯錯誤。這背後的邏輯是什麼? 非常感謝!

回答

5

你得到一個運行時錯誤因爲你告訴編譯器(通過顯式類型轉換)相信你沒有犯錯誤,所以它忽略了錯誤,並且在編譯時沒有檢測到它時間。但是當程序運行時,你會得到一個異常,因爲super1實際上是ASuperClass而不是ASubClass

在第二種情況下,編譯錯誤編譯錯誤,因爲編譯器知道你犯了一個錯誤(並且你沒有通過拋出例如告訴他信任你)。

+1

一個非常好的解釋。 – sschrass 2013-05-04 08:51:51

+0

很高興知道:)謝謝! – Maroun 2013-05-04 12:47:02

相關問題