我有一个非常基本的java理论问题。为什么Employee类在以下示例中以递归方式调用它?
class Employee {
Employee emp = new Employee();
}
public class Manager extends Employee {
public static void main(String[] args){
Manager mgr = new Manager();
}
}
答案 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
,依此类推。