class Creature{
public Creature(){
System.out.println("Creature无参数的构造器");
}
}
class Animal extends Creature{
public Animal(String name){
System.out.println("Animal带一个参数的构造器,该动物的name为" + name);
}
public Animal(String name , int age){
this(name);
System.out.println("Animal带两个参数的构造器,其age为" + age);
}
}
public class Superman extends Animal{
public Superman(){
super("灰太狼", 3);
System.out.println("Wolf无参数的构造器");
}
public static void main(String[] args){
new Superman();
} }
编译运行:
Creature无参数的构造器
Animal带一个参数的构造器,该动物的name为灰太狼
Animal带两个参数的构造器,其age为3
Wolf无参数的构造器
图1-1
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
1.new Superman();
调用Superman的空参构造器;
2. super("灰太狼", 3);
进入到Superman构造器,遇到“ super("灰太狼", 3);”语句,进入到其父类Animal的双参构造器“ public Animal(String name , int age)”;
3. public Animal(String name , int age){
this(name);
System.out.println("Animal带两个参数的构造器,其age为" + age);
}
在Animal的双参构造器中,这里调用了this的构造器,所以不调用父类空参的构造器;于是执行“this(name);”进入到Animal的单参构造器;
4.public Animal(String name){...}
若子类构造器中没显示调用this或super的构造器,则子类构造器会默认调用父类的空参构造器,所以进入到Animal的父类Creature的空参构造器“public Creature()”;
执行完其内部的“System.out.println("Creature无参数的构造器");”语句之后,再执行“System.out.println("Animal带一个参数的构造器,该动物的name为" + name);”执行完毕回到Animal的双参构造器执行“System.out.println("Animal带两个参数的构造器,其age为" + age);”;其后回到Superman的无参构造器,执行“ System.out.println("Wolf无参数的构造器");”;整个程序执行完毕,结果如上图1-1。