看板 java 關於我們 聯絡資訊
請問下面這段 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
tomap41017:override 跟隱藏上層的不同,你函數的signature已經改 06/22 11:07
tomap41017:變,不可視作override,請加上 annotation就知 06/22 11:09
PttTime:此時e只有h(A)及h(C)兩方法,因傳入B又因多型,故呼叫h(A) 06/22 23:53
PttTime:而因實體G繼承F,又因F已override h(A),故結果為3 06/22 23:56
aya92:了解了 謝謝~ 06/23 06:14