父类中的子实例

时间:2014-01-02 09:04:16

标签: java

我在java中有类:A。类B扩展了类A

A包含类B的实例。

我注意到当我调用类B的构造函数时(当我在类A中初始化此参数时),它执行super(),创建A的新实例并初始化所有字段。

如何告诉类BA的具体实例(它是init it字段) - 它是他的父类?

2 个答案:

答案 0 :(得分:2)

您的问题很难理解,但我想问题就是这个(您的方法):

public class A {
    public B b = new B();
}

public class B extends A {
}

因此,当您运行new A()时,您会获得StackOverflowError

根据我的实际经验,我从不需要这样的设计,我强烈建议重新考虑你的方法。但是,如果确实需要,您可以使用专用的init()方法,例如:

public class A {
    public B b;

    public void init() {
        b = new B();
    }
}


A a = new A();
a.init();

答案 1 :(得分:1)

如果您需要B中的A,您可以使用B的自定义构造函数来执行此操作:

class B extends A {

    A a;     

    public B() {
        super();
        this.a = this;
    }
}

这种情况更难,但你需要:

class A {
    B b;     
}

class B extends A {
     public B() {
         super();
         b = this;
     }
}

请注意,您不应该将B传递给对super()的调用,因为B不会被初始化,您应该将其作为B的构造函数中的最后一步。