我正在执行下面的代码时遇到一些“Stack Over Flow”异常。 我正在制作一个“匿名内心课”。
public class Prac_RegularInnerClass {
public static void main(String args[])
{
Child1 c1=new Child1();
c1.method4();
}
}
class Parent1{
public int z=10;
public void method1()
{
System.out.println("We are in Method 1!!!!!!!!!\n\n");
}
public void method2()
{
System.out.println("We are in Method 2!!!!!!!!!\n\n\n");
}
}
class Child1 extends Parent1{
//Anonymous Inner class.
Parent1 p1=new Child1(){
public void method1()
{
}
};
public void method4()
{
p1.method1();
p1.method2();
}
}
我已经制作了父类Parent1。我做了一个智力课Child1。 谁能解释一下?
答案 0 :(得分:2)
因为每次创建Child1
的实例时,它都会创建一个Child1
的匿名实例,它会创建另一个Child1
的匿名实例,依此类推......
答案 1 :(得分:1)
因为您在块级Child1
内实例化了Child1
类。除了构造函数或块之外,您必须在其他地方实例化匿名类。
class Child1 extends Parent1{
Parent1 p1;
public void method4(){
if(p1==null){
p1=new Child1(){
public void method1(){}
};
}
p1.method1();
p1.method2();
}
}
答案 2 :(得分:1)
你创造了一个无限的创作循环。每当您创建Child1
时,它会在其中创建一个内部Child1
,其内部包含一个Child1
,内部有Child1
,其中包含Child1
} ...
答案 3 :(得分:1)
这可能是因为在构造阶段的Child1中你将p1属性设置为Child1本身的匿名子类,这使得一个新的Child1对象实例化,这使得一个新的Child1对象实例化,这使得一个新的Child1对象实例化,这会使新的Child1对象实例化,依此类推。
相反,要么在构造它们之后分配新对象,要么指定不以递归方式结束的不同类型的对象。