当前位置: 技术问答>java相关
简单问题,请给我一个解释。立即给分。
来源: 互联网 发布时间:2017-04-10
本文导语: class A0 { A0(){ f(); } void f(){ System.out.println("****A0.f"); } } class A extends A0{ void f() { System.out.println("***A.f"); } } 请问,实例化A时,输出“***A0...
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”?为什么?
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”?为什么?
|
A.f了,A a = new A()肯定是A.f。
A0 b = new A()的时候,在运行期它会自动检查类型,发现new出的是A的实例,从而调用A.f。
A0 b = new A()的时候,在运行期它会自动检查类型,发现new出的是A的实例,从而调用A.f。
|
“***A.f",f()重载了.
|
我想是A.f(),虽然先调用基类的构造函数,但是只要你重载了函数,就会用重载
版本。
版本。
|
在编译的时候,f()就被重载了.
new的时候是运行才在堆上new出来了....
new的时候是运行才在堆上new出来了....