黑马程序员技术交流社区
标题:
下面程序的输出结果为什么会是2,2,3而不是1,3?
[打印本页]
作者:
李高翔
时间:
2011-11-16 13:10
标题:
下面程序的输出结果为什么会是2,2,3而不是1,3?
class Teacher extends Person {
public Teacher() {
super();
}
public Teacher(int a) {
System.out.print(a);
}
public void func() {
System.out.print("2,");
}
public static void main(String[] args) {
Teacher t1 = new Teacher();
Teacher t2 = new Teacher(3);
}
class Person {
public Person() {
func();
}
public void func() {
System.out.print("1,");
}
}
作者:
葛雨龙
时间:
2011-11-16 13:35
func 已经被重写了,虽然去找父类的构造方法,但是父类要调用的func已经被重写了,那么必然用子类的 自然第一个是2 第2个是23
作者:
齐国峰
时间:
2011-11-16 13:46
本帖最后由 齐国峰 于 2011-11-16 13:47 编辑
支持楼上第一个是被子类重写了,
第二个2好像是因为
public Teacher(int a) {
System.out.print(a);
}
这个好像会等价于
public Teacher(int a) {
this();
System.out.print(a);
}
作者:
吉许
时间:
2011-11-16 16:08
你这要考查的是继承和函数的重载.
具体就是被依赖的先构造,依赖于人的后构造.跨层依赖优先于同层依赖构造
作者:
xiwangliujiao
时间:
2011-11-16 23:37
前两个是2是因为在调用无参构造方法时,先去调用父类的构造方法,而父类构造方法中调用的方法在子类中重写了,所以调用子类的方法,然后又回来调用子类的构造方法,依次递归,
输出3是调用teacher的有参的构造方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2