Java子类相互访问

时间:2016-02-11 16:39:17

标签: java inheritance stack-overflow

我有一个基本的类结构:

public class A {

}

public class B extends A {
    private C objC;

    public B() {
        this.objC = new C();
    }
}

public class C extends A {
    private B objB;

    public C() {
        this.objB = new B();
    }
}

我需要BC来了解彼此,以便他们可以访问彼此的方法,但显然在运行时这会创建一个循环依赖并导致java.lang.StackOverflowError: null 。我看过thisthis,但我似乎无法就我应该做的事情做好决定。

有没有更好的方法来解决这个问题?

编辑1:在保持简洁的同时更能描述我的情况:

public class A {

}

public class B extends A {
    private C objC;

    public B() {
        this.objC = new C();
    }

    public String foo1() {
        int x = C.foo3();
        //do something
        return Integer.toString(int);
    }

    public int foo2() {
        // do something
    }
}

public class C extends A {
    private B objB;

    public C() {
        this.objB = new B();
    }

    public int foo3() {
        int y = B.foo2();
        //do something
        return y;
    }
}

1 个答案:

答案 0 :(得分:1)

如果要在不同对象之间建立通信,请使用Mediator模式。

Mediator - 定义同事对象之间的通信接口

ConcreteMediator - 实现Mediator接口并协调Colleague对象之间的通信。它了解所有同事及其在交流沟通方面的目的。

ConcreteColleague - 通过其调解员与其他同事沟通

请看一下这个链接:https://en.m.wikipedia.org/wiki/Mediator_pattern