Java类实例递归调用

时间:2014-12-04 14:07:57

标签: java

我有一个非常基本的java理论问题。为什么Employee类在以下示例中以递归方式调用它?

class Employee {

Employee emp = new Employee();

}

public class Manager extends Employee {

    public static void main(String[] args){

        Manager mgr = new Manager();

    }
}

3 个答案:

答案 0 :(得分:3)

看看代码在做什么:

当您创建新的Manager对象时,该Employee对象的Manager部分也将被初始化(因为Manager扩展Employee

初始化Employee部分时,将初始化其emp成员变量。它将使用新的Employee对象进行初始化。但该对象还有一个emp成员变量,该变量将使用新的Employee对象进行初始化。该对象还有一个emp成员变量,该变量将使用新的Employee对象进行初始化。该对象还有一个emp成员变量,该变量将使用新的Employee对象进行初始化。该对象还有一个emp成员变量,该变量将使用新的Employee对象进行初始化。该对象还有一个emp成员变量,该变量将使用新的Employee对象进行初始化。该对象还有一个emp成员变量,该变量将使用新的Employee对象进行初始化。 ...等等,直到堆栈溢出。

答案 1 :(得分:0)

跳过注释对象创建,每次创建Employee时,如果创建Manager,因为它继承了它,它会进入内部循环。

class Employee {

//Employee emp = new Employee();

}

答案 2 :(得分:0)

class Employee {
    Employee emp = new Employee();
}

这意味着每个Employee包含另一个Employee的实例。因此,当构建Employee时,它还必须创建它包含的Employee。但是,按照相同的逻辑,Employee必须还必须构建自己的子Employee,依此类推。