0

我正在尝试使用组合来分解功能,但不确定如何引用“封装”类(不确定在组合中调用了什么级别)。这是一个人为的示例,其中 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>
    }
}
4

2 回答 2

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
        }
    }
}
于 2013-10-04T14:11:11.793 回答
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);
}
于 2013-10-04T14:12:08.410 回答