父类构造方法调用

1.所有类如果没有构造函数,Java都会提供默认的无参构造函数,该函数什么都不做。

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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章