当调用某个类的构造器来创建java对象时,系统总会先调用父类的非静态初始化块进行初始化,接着会调用父类的一个或多个构造器执行初始化。super调用和this调用都必须作为
构造器的第一行代码,因此它们调用时只能使用其中之一,且最多只能调用一次。
class Creature{
{
System.out.println("Creature的非静态初始化代码快");
}
public Creature(){
System.out.println("Creature的无参构造器");
}
public Creature(String name){
//使用this调用另一个重载的无参的构造器
this();
System.out.println("Creature的有参构造器"+name);
}
public Creature(String name,int age){
//使用this调用另一个重载的无参的构造器
this();
System.out.println("Creature的有参构造器"+name);
}
}
class Animal extends Creature{
{
System.out.println("Animal的非静态初始化代码快");
}
public Animal(String name) {
super(name);
// TODO Auto-generated constructor stub
System.out.println("Animal的带有一个参数的构造器"+name);
}
public Animal(String name,int age) {
this(name);
// TODO Auto-generated constructor stub
System.out.println("Animal的带有一个参数的构造器"+name);
}
}
class Wolf extends Animal{
{
System.out.println("Wolf的非静态初始化代码快");
}
public Wolf(String name,double weight) {
super("大尾巴狼",6);
// TODO Auto-generated constructor stub
System.out.println("wolf的无参构造器"+weight);
}
}
class BianDemo{
public static void main(String[] args) {
new Wolf("大灰狼",5.6);
}
}
执行构造方法时取决于this调用super调用,如果没有这两个调用,系统就会默认调用无参的构造方法。