作者aya92 (宅宅)
看板java
標題[問題] overloading和繼承
時間Wed Jun 22 03:13:19 2011
請問下面這段
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