JAVA#Super构造器练习'

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。

猜你喜欢

转载自blog.csdn.net/Iverson941112/article/details/82078878