看板 java 關於我們 聯絡資訊
參考了http://programming.im.ncnu.edu.tw/J_Chapter6.htm 我知道upcasting和downcasting的差異 Animal a1, a2, a3, a4; Bird b; Dog d; Fish f; a2 = a1 = new Animal(); b = new Bird(); d = new Dog(); f = new Fish(); System.out.println(a1.moveMethod()); System.out.println(b.moveMethod()); System.out.println(d.moveMethod()); System.out.println(f.moveMethod()); a1 = b; // Correct, we call this upcasting b = a1; // Compile Error, type not compatible b = (Bird)a1; // downcasting, Compile Correct a2 = b; // Correct,we call this upcasting d = a2; // Compile Error, type not compatible d = (Dog)a2; // Compile Correct, but runtime error 但是我有一個問題, 當我於主程式之內new一個B類別名為b, 且有一個副程式名為show(Object obj)比如 public static void show(Object obj) { if( obj instanceof A )//假設有繼承關係為真 { B newobj= (B)obj; newobj.show();//假設B類別有show()此方法 } } 然後在主程式呼叫此副程式show(b), 卻不會有runtime error?? object不是根類別嗎? 為何根類別強制轉型為子類別時(B newobj= (B)obj;) 不會出現runtime error? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.76.163
rmbrick:所以他已經先問說是不是A了 03/22 00:10
paulcaptain:不好意思, 樓上我不知道你所指的意思是...... 03/22 00:17
TonyQ:你看到的那個部份就跟 b = (Bird)a1; 意思一樣啊 03/22 00:21
TonyQ:Object是所有類別的父類別,也就是Object是A的父類別 03/22 00:23
paulcaptain:obj instanceof A 不是應該是指obj繼承A嗎? 03/22 00:30
想再請教一下, 為何show(Object obj)可以使用Object接收B類別呢? ※ 編輯: paulcaptain 來自: 114.37.76.163 (03/22 00:34)
PsMonkey:你的文章當中根本沒有解釋 B 跟 A 的關係... 03/22 00:45
PsMonkey:B extend 或是 implement A 就沒問題啊 根本是算命文嘛 03/22 00:46
TonyQ:註解裡跟原文網址有提到啦...樓上別衝動XD 03/22 00:48
paulcaptain:謝謝TonyQ幫忙解釋...... 03/22 00:57
PsMonkey:==.=== 誰知道你的 B 是 bird,話不講清楚不要怪版規嚴格 03/22 01:36