JAVA谁来解释下这段代码!!

来源:百度知道 编辑:UC知道 时间:2024/05/31 07:52:37
//这段代码,为什么结果会打印两句 Base Construct Base Construct
public class Test extends Base{
public Test(){
super();
}
Test(String name)
{
}
public static void main(String args[]){
ssTest t=new Test();
Test t2=new Test("TestName");
}
}
class Base{
String name;
Base(){
System.out.println("Base Construct");
}
Base(String name){
this.name=name;
}
}

class Base{ //基类
String name; //一个name属性
Base(){ //构造函数
System.out.println("Base Construct"); //输出信息
}
Base(String name){ //另一个构造函数:带参数
this.name=name; //设置属性为参数
}
}

public class Test extends Base{ //继承上面的基类
public Test(){ //构造函数
super(); //调用基类构造函数(默认)
}
Test(String name) //另一个构造函数:带参数,但是不做任何事情
{
}
public static void main(String args[]){ //main()入口函数
Test t=new Test(); //构造Test对象t
Test t2=new Test("TestName"); //构造带参数的对象
}
}
------------------
于是构造下来t t2对象的name属性都是空

因为Test继承自Base类,也就是说Test是Base的子类。
子类在实例化的时候,都会首先调用父类的构造方法。
所以无论是否显示的调用父类的构造方法,父类的构造方法都会自动执行。

因此会输出两句 Base Construct Base Construct。

虽然你没有使用默认的Test类的构造函数,但是在自己写的构造函数中调用了基类的无参数构造函数,所以你两次new出Test对象都会调用基类的无参数构造函数,所以显示了两个Base Construct

因为继承中,会调用父类默认的构造方法
除非制定某个父类构造方法super(参数);

public class Test extends Base{
p