作者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
1F:推 tomap41017:override 跟隐藏上层的不同,你函数的signature已经改 06/22 11:07
2F:→ tomap41017:变,不可视作override,请加上 annotation就知 06/22 11:09
3F:推 PttTime:此时e只有h(A)及h(C)两方法,因传入B又因多型,故呼叫h(A) 06/22 23:53
4F:→ PttTime:而因实体G继承F,又因F已override h(A),故结果为3 06/22 23:56
5F:→ aya92:了解了 谢谢~ 06/23 06:14