public class Test{
public static void main(String args[]){
Test t = new Test();//默认的无参构造函数
}
}
运行结果:
2.如果类提供了构造函数,无论是否有参,Java都不会提供默认的无参构造函数。
public class Test{
public Test(){System.out.println("无参构造函数");}//(1)无参构造函数
public Test(int x){System.out.println("有参构造函数");}//有参构造函数
public static void main(String args[]){
Test t = new Test();//(1)如果被注释,这行语句就会出错
Test t2 = new Test(2);
}
}
运行结果:
[color=blue]无参构造函数
有参构造函数[/color]
[color=red]注意:如果类仅仅提供了有参的构造函数,那么调用无参构造函数就会出错,无法编译。[/color]
3.子类构造函数会默认调用父类的无参构造函数
class Base{
public Base(){System.out.println("父类无参构造函数");}
public Base(int x){System.out.println("父类有参构造函数");}
}
public class Test extends Base{
public Test(){System.out.println("子类无参构造函数");}
//public Test(){super();System.out.println("子类无参构造函数");}
public Test(int x){System.out.println("子类有参构造函数");}
public static void main(String args[]){
Test t = new Test();//(1)
Test t2 = new Test(2);//(2)
}
}
运行结果:
[color=blue]父类无参构造函数
子类无参构造函数
父类无参构造函数
子类有参构造函数[/color]
(1)和(2)都会调用Base();
[color=red]注意:如果父类仅仅提供了有参的构造函数,那么子类的构造函数就会出错。[/color]
4.子类使用super()关键字可以指定调用父类哪个构造函数
class Base{
public Base(int x){System.out.println("父类有参构造函数");}
}
public class Test extends Base{
public Test(){super(2);System.out.println("子类无参构造函数");}
public Test(int x){super(x);System.out.println("子类有参构造函数");}
public static void main(String args[]){
Test t = new Test();//(1)
Test t2 = new Test(2);//(2)
}
}
运行结果:
[color=blue]父类有参构造函数
子类无参构造函数
父类有参构造函数
子类有参构造函数[/color]
(1)和(2)都会调用父类的有参构造函数。
[color=red]注意:super()语句必须是构造函数的第一条语句。[/color]