關於javase中 instanceof的用法 爲什麼判讀之後 還要進行強制類型轉換

筆記  :  java中多態的理解   應該理解爲兩個階段: 一個是編譯的階段  另一個是運行的階段:

例如 


Clas A{  }  父類




子類B :Class B extends A{

 public void  test(Object  o){

if(o instanceof A ){

    A  a = (A)o//  剛開始的時候  這裏我一直鬧不明白這裏爲什麼要進行強制轉換  因爲b.test(c)這裏明明傳入C是A的子類   , 根據多態 子類的引用可以直接付給父類的引用  爲什麼還要進行強制類型轉換呢?

後來才明白  if(o instanceof A ) 執行這句話的時候  在運行階段 這裏的確是判斷o是不是A類的一個實例或者子類,但是在編譯階段 ,public void  test(Object  o) 這裏的o編譯器就是認爲是Object的引用 o  是所有類的父類,

A是Object的子類,那麼在編譯階段  : 父類的引用不能直接付給子類  ,所以要進行強制類型轉換

}

}

子類C:Class C extends A{}


B b = new B();

C c =new C();

b.test(c)




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章