黑马程序员技术交流社区
标题:
Java继承
[打印本页]
作者:
黑马19期--李
时间:
2016-2-3 13:42
标题:
Java继承
在继承结构里面,子类的构造函数中使用了super();
如:
class Fu
Fu(){
Show1();
}
public void Show1(){
System.out.println("Fu");
}
class Zi
Zi(){
super();
}
public void Show1(){
System.out.println("Zi");
}
意思应该是子类的空参重写父类的空参函数(只不过一模一样)而不应该是调用了父类的空参函数吧,不然主函数:Zi zi=new zi();打印出来的就不是Zi而是Fu了。
作者:
life55
时间:
2016-2-3 14:28
这个跟重写没关系吧,主函数:Zi zi=new zi(); 有super()会先去执行父类的构造函数,父类构造函数调用方法show1();调用的是子类的show1()方法.所以打印的是Zi
作者:
好大一只
时间:
2016-2-3 14:59
super();会去调用Fu(){}
然后先去子类找Show1(),找到了就执行
作者:
jdissx01
时间:
2016-2-3 15:39
super();是调用了父类的空参函数,不是重写.这个 super();你写不写系统都会默认加上.然后子类空参构造就也有了Show1方法~Zi zi=new zi();是Zi的Show1重写了父类方法,运行时会执行子类方法.
作者:
ChiCaoMa
时间:
2016-2-3 16:15
构造函数是为了初始化对象的属性。当存在继承关系的时候,子类中的构造函数(空参或者有参)都会在函数内的第一行加上super();语句,目的是初始化父类的对象属性,因为有可能子类会用到父类中的属性,所以必须先初始化父类的属性。这里肯定不是重写啦。重写要求是普通函数,且函数名相同。你这里很明显是构造函数,连返回类型都没有,甚至都没有void。你可以在构造函数中加入输出语句来判断执行的顺序。
作者:
983859111
时间:
2016-2-3 18:23
Zi zi =new Zi() 的执行流程是这样的:
1.先执行子类构造Zi();
2.而后走super();来初始化Fu类对象;
3.然后Fu类中的构造调用了show方法;
4.子类恰好又重写了show方法,又是子类的对象调用的,所以最后才会输出zi
作者:
黑马19期--李
时间:
2016-2-3 21:52
嗯嗯,大家都说得好详细,谢谢大家
作者:
C.罗纳尔多
时间:
2016-2-3 23:43
上面已经说了{:2_31:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2