筆記 : 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)