Java基礎(chǔ)積累之instanceof

使用instanceof的場景

首先先要明確Java中存在編譯時類型和運行時類型,比如

Object obj = new String("xiaoysec");

其中,obj編譯時類型是Object類型的,運行時也就是實際的類型是String類型的,在Java中,一個父類引用指向子類對象,并調(diào)用重寫的方法就可以實現(xiàn)多態(tài)的效果,父類引用指向一個子類對象,這個是系統(tǒng)自動就完成那個的向下轉(zhuǎn)型,也規(guī)定了在這種情況下父類引用只能調(diào)用父類中定義的方法而不能調(diào)用子類中定義的方法,否則會報錯

那么如果父類引用一定要調(diào)用子類中定義方法,就需要將父類引用進行轉(zhuǎn)型,這種稱之為強制轉(zhuǎn)型

強制轉(zhuǎn)型

接上面的例子,Object obj = new String("xiaoysec"); ,
obj實際的類型是String類型的,編譯時類型是Object,需要進行轉(zhuǎn)型才能調(diào)用String類型的特有方法,需要知道這種轉(zhuǎn)型的條件:

  • 首先編譯時類型和運行時類型需要存在繼承關(guān)系

在上面的例子中Object類型和String類型存在繼承關(guān)系,可以進行轉(zhuǎn)型,上例中如果父類對象的運行時類型也就是實際的類型是Object,進行強轉(zhuǎn)是會報錯的

** String str = (String)obj;** 完成轉(zhuǎn)型,這個時候就可以調(diào)用String類型的方法了

instanceof的引出

instanceof的出現(xiàn)可以說是為了程序的健壯性,因為如果出現(xiàn)了類型轉(zhuǎn)換不能進行的情況,就會報錯,使用instanceof就可以判斷是否可以轉(zhuǎn)換成功,這樣保證的程序的健壯性

instanceof的注意點

  • A instancef B 首先A的類型是有其運行時類型也就是真是類型決定的
  • 當A是B(一個類或者接口)的實例,子類實例,接口實現(xiàn)類實例的時候就返回true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容