簡體   English   中英

為什么在我的代碼中出現“ ClassCastException”?

[英]Why does “ClassCastException” occur in my code?

interface Foo {}
class Alpha implements Foo {}
class Beta extends Alpha {}

class Delta extends Beta {
    public static void main( String[] args ) {
        Beta x = new Beta();
        Foo f=(Delta) x; 
    }
}

為什么在這里發生ClassCastException

只需用簡單的英語編寫代碼:

oo

Alpha IS-A Foo

Beta IS-A Alpha

台達IS-A Beta

注意:

Beta IS-NOT A Delta

在這里更改行;

Foo f = (Delta) x; 

希望這可以幫助。 如果您有任何疑問,請告訴我。

您將收到符合JLS§5.5.3ClassCastException

這是用於檢查對象的運行時類型R是否與類型T兼容的算法,該類型T是在強制轉換運算符中命名的類型的擦除(第4.6節 )。 如果拋出運行時異常,則為ClassCastException

如果R是一個普通類(不是數組類):

  • 如果T是一個類類型,然后R必須是同一類( §4.3.4 )作為T或的子類T ,或運行時則拋出異常。

  • ...

...

在您的情況下, RBetaTDelta 請注意, Beta不是Delta的子類。

您將x強制轉換為Deltax的類型為Beta ,它是Delta擴展的,反之亦然。 因此,您的ClassCastException

順便說一句, 伽瑪怎么了?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM