[問題] 有關object casting的問題

看板java作者 (我不會寫程式)時間15年前 (2010/03/22 00:07), 編輯推噓2(208)
留言10則, 4人參與, 最新討論串1/2 (看更多)
參考了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

03/22 00:10, , 1F
所以他已經先問說是不是A了
03/22 00:10, 1F

03/22 00:17, , 2F
不好意思, 樓上我不知道你所指的意思是......
03/22 00:17, 2F

03/22 00:21, , 3F
你看到的那個部份就跟 b = (Bird)a1; 意思一樣啊
03/22 00:21, 3F

03/22 00:23, , 4F
Object是所有類別的父類別,也就是Object是A的父類別
03/22 00:23, 4F

03/22 00:30, , 5F
obj instanceof A 不是應該是指obj繼承A嗎?
03/22 00:30, 5F
想再請教一下, 為何show(Object obj)可以使用Object接收B類別呢? ※ 編輯: paulcaptain 來自: 114.37.76.163 (03/22 00:34)

03/22 00:45, , 6F
你的文章當中根本沒有解釋 B 跟 A 的關係...
03/22 00:45, 6F

03/22 00:46, , 7F
B extend 或是 implement A 就沒問題啊 根本是算命文嘛
03/22 00:46, 7F

03/22 00:48, , 8F
註解裡跟原文網址有提到啦...樓上別衝動XD
03/22 00:48, 8F

03/22 00:57, , 9F
謝謝TonyQ幫忙解釋......
03/22 00:57, 9F

03/22 01:36, , 10F
==.=== 誰知道你的 B 是 bird,話不講清楚不要怪版規嚴格
03/22 01:36, 10F
文章代碼(AID): #1BfaHRmY (java)
文章代碼(AID): #1BfaHRmY (java)