下面类的输出是什么?必须说出为什么会是这个结果!class People extends Try{
public void test(){
System.out.println("People Test!");
}
public People(){
}
}public class Try{
public void test(){
System.out.println("Try Test!");
};
public Try(){
test();
}
public static void main(String[] arg){
new People();
}
}
public void test(){
System.out.println("People Test!");
}
public People(){
}
}public class Try{
public void test(){
System.out.println("Try Test!");
};
public Try(){
test();
}
public static void main(String[] arg){
new People();
}
}
又是这种问题...
new People()先调用基类构造函数...
基类构造函数调用test()
由于动态绑定,而且实际类型是People
所以调用了People的test()....
People Test!
不知道是这样嘛..我还是一个初学者..
我是这样理解的:
首先 只 new 了People;没有调用任何方法和属性,这种情况下系统只会自动调用构造方法,
按照JAVA的规定父类的构造方法 总会比 子类的构造方法先被运行,所以这里 会自动运行
父类的public Try(){
test();
}
构造方法,而子类的构造方法为空方法,父类的构造方法的作用是调用test();这个行为,不注意会以为 结果是输出Try Test!
但是,仔细发现子类已经重写了这个方法,按照JAVA的规定:从子类中调用重写方法时,将总是调用出现在子类中的方法,所以最后的结果是:People Test!由于我还是 新人..解释得语言 不流利... 不知道 是否正确 共同学习...不求给分
由main()出发 new People() 应该调用People()构造方法 , 但是People继承了Try类 调用子类构造方法之前要调用父类的构造方法 Try() ,在其内部调用text()方法 ,这是父类的text()方法已经被子类的同名方法覆盖,所以调用的是子类的text()方法 (再调用People的构造方法 没有任何动作) 输出结果。
这个真得是我的面试题 我写错了 哭~