当前位置: 技术问答>java相关
有关Java构造函数的问题之三——继承性
来源: 互联网 发布时间:2015-02-11
本文导语: 假如有三个相互继承的类:test3继承了test2,而test2继承了test1。那么在test3的构造函数中super()调用的是哪个类构造函数?test3可以调用test1的构造函数吗?如果行,该怎么办? | 类的继承关系是这样的:子...
假如有三个相互继承的类:test3继承了test2,而test2继承了test1。那么在test3的构造函数中super()调用的是哪个类构造函数?test3可以调用test1的构造函数吗?如果行,该怎么办?
|
类的继承关系是这样的:子类在构造函数中没有明确使用super(...)的时候会缺省调用super(),这个关系一直上延,你试试下面的程序就明白了。
class test0{
public test0() {
System.out.println("test0");
}
}
class test1 extends test0{
public test1() {
//super();
System.out.println("test1");
}
}
public class test extends test1{
public test() {
//super();
System.out.println("test");
}
public static void main(String args[]) {
test t=new test();
}
}
你可以把super()前的注释取消,结果都是一样的。
class test0{
public test0() {
System.out.println("test0");
}
}
class test1 extends test0{
public test1() {
//super();
System.out.println("test1");
}
}
public class test extends test1{
public test() {
//super();
System.out.println("test");
}
public static void main(String args[]) {
test t=new test();
}
}
你可以把super()前的注释取消,结果都是一样的。
|
如果你继承了一个类后,当你创建这个类的对象时,在初始化中,会自动调用其父类的构造函数
当你new test3时,先调用test3的构造函数,因为test3 extends test2,所以先调用test2的构造函数,test2又extends test1,所以对test1的构造函数就行调用.
执行完test1构造函数中的主体后,执行test2构造函数里的主体,最后执行test3的主体.
当你new test3时,先调用test3的构造函数,因为test3 extends test2,所以先调用test2的构造函数,test2又extends test1,所以对test1的构造函数就行调用.
执行完test1构造函数中的主体后,执行test2构造函数里的主体,最后执行test3的主体.
|
super指向*父类*,如果*父类*的构造函数中也super了的话,当然会再调用*爷类*了:)