本帖最后由 我能学编程吗 于 2013-10-24 01:01 编辑
我个人简单分析如下:
new一个对象时,要先存在父类,现实中也就是要先有爸爸才有儿子。
所以new一个对象时,子类都要调用父类的构造函数,意思是先让爸爸先出来,爸爸又有爸爸,又得调用super(),最终是调用到Object的构造器,也就是说Object是最先出来的,然后是它的儿子出来,然后是儿子的儿子出来。。。
好了,有了以上原理,那们我们就知道了,所有的构造器都是用来创建对象的,那么在创建对象的第一行,一般都是会用super()调用父类,如果你不写的话Java会自动加上。如下:
class Child extends Parent {
public Child() {
super();
}
public Child(int i) {
super();
}
}
那为什么this可以放在第一句,如下:
class Child extends Parent {
public Child() {
super(); // 如果不写默认会加上
}
public Child(int i) {
this(); // 如果写了this,第一行就不会默认加上super()了
}
}
上面代码最张会调用这个构造函数:public Child() ,从代码可知,这里会调用super(); 那么此时父类又会调用super。。。一直把所有的爸爸都搞出来为止,然后自己才出来。
那为什么this与super不同同时出现?如下:
class Child extends Parent {
public Child() {
super();
}
public Child(int i) {
this(); // 将会调用public Child() ,那么Child() 中的super将会执行,父类也会调用super。。。一直把所有的爸爸都搞出来
super(); // 父类也会调用super。。。一直把所有的爸爸都搞出来
}
}
从上面分析,爸爸要搞出来两次,不合理吧!所以为什么this()与super()不能同时出现,希望能明白!
|