简单问题,请给我一个解释。立即给分。

careless 2002-12-27 03:36:16
class A0 {
A0(){
f();
}

void f(){
System.out.println("****A0.f");
}
}


class A extends A0{

void f() {
System.out.println("***A.f");
}

}


请问,实例化A时,输出“***A0.f”还是“***A.f”?为什么?
...全文
15 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
beming 2002-12-27
  • 打赏
  • 举报
回复
重载,输入***A.f

如果你是用new的话,就不是啦,不信你可以试试,实践是检验真理的唯一方法
shuhw 2002-12-27
  • 打赏
  • 举报
回复
肯定时A中的f方法
coaa 2002-12-27
  • 打赏
  • 举报
回复
在编译的时候,f()就被重载了.
new的时候是运行才在堆上new出来了....

careless 2002-12-27
  • 打赏
  • 举报
回复
但f()是在A0构造方法中被调用的啊,怎么会受重载影响?
dentance 2002-12-27
  • 打赏
  • 举报
回复
我想是A.f(),虽然先调用基类的构造函数,但是只要你重载了函数,就会用重载
版本。
coaa 2002-12-27
  • 打赏
  • 举报
回复
“***A.f",f()重载了.
yaozi 2002-12-27
  • 打赏
  • 举报
回复
A.f了,A a = new A()肯定是A.f。
A0 b = new A()的时候,在运行期它会自动检查类型,发现new出的是A的实例,从而调用A.f。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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