如何从“has-a”(包含)类访问“容器”方法

时间:2013-10-04 14:00:18

标签: java composition

我正在尝试使用合成来分解功能,但我不确定如何引用回“封装”类(不确定在合成中调用什么级别)。这是一个人为的示例,其中Body可以看到Leg方法,但Leg无法看到Body方法。我是否必须更改访问修饰符或以不同方式实例化?提前谢谢。

public class Body {

    private Leg leg;

    public Body() {
        leg = new Leg();
    }

    public void takeStep() {
        leg.move();
    }

    public Boolean isStanding() {
        return true;
    }

    public static void main(String[] args) {
        Body body = new Body();
        body.takeStep();
    }
}

``

public class Leg {

    public void move() {
        if(body.isStanding()) // PROBLEM:  no access to body
            ; // <extend details>
    }
}

2 个答案:

答案 0 :(得分:0)

我猜您可以通过将值作为参数

传递来尝试如下
public class Body {

    private Leg leg;

    public Body() {
        leg = new Leg();
    }

    public void takeStep() {
        leg.move(isStanding());
    }

    public Boolean isStanding() {
        return true;
    }

    public static void main(String[] args) {
        Body body = new Body();
        body.takeStep();
    }
}
class Leg{
    public void move( boolean isStanding){
        if(isStanding){
            // your code
        }
    }
}

答案 1 :(得分:0)

您可以通过在实例化包含的类时传递其引用来访问容器方法。因此,您要将Leg类声明为

public class Leg {

    Body parent;

    public Leg(Body parent) {
        this.parent = parent;
    }

    public void move() {
        if(parent.isStanding()) // PROBLEM:  no access to body
            ; // <extend details>
    }

}

您可以将Leg中的Body实例化为

public Body() {
    leg = new Leg(this);
}