内部类异常

时间:2012-02-25 09:53:01

标签: java

我正在执行下面的代码时遇到一些“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。 谁能解释一下?

4 个答案:

答案 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对象实例化,依此类推。

相反,要么在构造它们之后分配新对象,要么指定不以递归方式结束的不同类型的对象。