在给定的代码中将编译器插入super();两个动物建设者的声明?

时间:2016-04-10 12:07:35

标签: java

public class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    Animal() {
        this(makeRandomName());
    }

    static String makeRandomName() {
        int x = (int) (Math.random() * 5);
        String name = new String[] {"Fluffy", "Fido","Rover", "Spike","Gigi"}[x];
        return name;
    }

    public static void main (String [] args) {
        Animal a = new Animal();
        System.out.println(a.name);
        Animal b = new Animal("Zeus");
        System.out.println(b.name);
    }
}

2 个答案:

答案 0 :(得分:3)

不,对于调用其他构造函数的Animal()构造函数(使用this(makeRandomName());),super()不会被添加。它只会添加到Animal(String name)构造函数。

这当然意味着两个构造函数最终都会执行超类的构造函数(即Object的构造函数)。

答案 1 :(得分:2)

除非已明确提出super()super()来电,否则系统会插入this()来电。