[問題] overloading和繼承

看板java作者 (宅宅)時間13年前 (2011/06/22 03:13), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串1/1
請問下面這段 class A {} class B extends A {} class C extends B {} class D { int h(A x){System.out.println(1)} } class E extends D { int h(C x){System.out.println(2)} } class F extends E { int h(A x){System.out.println(3)} } class G extends F { int h(B x){System.out.println(4)} int h(C x){System.out.println(5)} } 然後跑: B b=new C(); E e=new G(); e.h(b); 結果是3 可是做了一些其他測試 認為e.h(b)應該會從class G的函式開始找 找到int h(B x)這個來執行 有人能指點我一下嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.122.245

06/22 11:07, , 1F
override 跟隱藏上層的不同,你函數的signature已經改
06/22 11:07, 1F

06/22 11:09, , 2F
變,不可視作override,請加上 annotation就知
06/22 11:09, 2F

06/22 23:53, , 3F
此時e只有h(A)及h(C)兩方法,因傳入B又因多型,故呼叫h(A)
06/22 23:53, 3F

06/22 23:56, , 4F
而因實體G繼承F,又因F已override h(A),故結果為3
06/22 23:56, 4F

06/23 06:14, , 5F
了解了 謝謝~
06/23 06:14, 5F
文章代碼(AID): #1E0ErISi (java)