注:
- 在创建对象时,会根据创建对象时用的是否显示初始化属性来调用相应的构造器
- 在子类的构造器中一般都有默认的super(),除非这边显示的调用super或者这边有this,因为this和super都必须放在第一行
代码:
public class ThisSuper {
public static void main(String[] args) {
new C();
}
}
class A{
public A(){
System.out.println("我是A类的无参构造器");
}
}
class B extends A{
public B(){
//这边有默认的super();
System.out.println("我是B类的无参构造器");
}
public B(String name){
//有默认的super(),除非这边显示的调用super或者这边有this(...),因为this(...)和super()都必须放在第一行
System.out.println(name+"我是B类的有参构造器");
}
}
class C extends B{
public C(){
this("hello");//有this()就不能有super()了,因为this(...)和super()都必须放在第一行
System.out.println("我是C类的无参构造器");
}
public C(String name){
super("hahaha");//如果注释掉该行,则这边就有默认的super();
System.out.println("我是C类的有参构造器");
}
}
输出结果:
我是A类的无参构造器
hahaha我是B类的有参构造器
我是C类的有参构造器
我是C类的无参构造器