一个继承的问题

nibuzhidaoo 2015-05-06 05:08:45
Class F {
Void innerDo() {
Println(“F do”);
}
}
Class C1 extends F {
Void innerDo() {
Println(“C1 do”);
}
}
Class C2 extends F {
Void innerDo() {
Println(“C2 do”);
}
}

Class Do {
Void do(F f){
Println(“do F”);
}

Void do(C1 c1){
Println(“do C1”);
}

Void do(C2 c2){
Println(“do C2”);
}
}

F c1 = new C1();
F c2 = new C2();
Do do = new Do();
Do.do(c1);
Do.do(c2); //为啥输出的是do F

c1.innerDo();
c2.innerDo();

...全文
159 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
飏飏一蝶 2015-05-06
  • 打赏
  • 举报
回复
重载匹配的顺序肯定是先精确匹配,无法精确匹配的情况下再依次向下转型寻找最佳匹配 你的c2是F型对象,显然能找到精确匹配的 我估计你的疑问是运行类型和编译类型选哪个的问题 直接用引用/编译类型进行匹配
瞄一眼就跑 2015-05-06
  • 打赏
  • 举报
回复
Class Do { Void do(F f){ Println(“do F”); } 你这不是已经写死了么

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧