Java “如何访问”;货柜;方法来自;has-a“;(包含)类

Java “如何访问”;货柜;方法来自;has-a“;(包含)类,java,composition,Java,Composition,我试图使用组合来分解功能,但不确定如何引用“封装”类(不确定组合中的级别提升是什么)。下面是一个人为的示例,其中主体可以看到腿部方法,但腿部无法看到主体方法。我是否必须更改访问修饰符或以不同方式实例化?提前谢谢 public class Body { private Leg leg; public Body() { leg = new Leg(); } public void takeStep() { leg.move();

我试图使用组合来分解功能,但不确定如何引用“封装”类(不确定组合中的级别提升是什么)。下面是一个人为的示例,其中主体可以看到腿部方法,但腿部无法看到主体方法。我是否必须更改访问修饰符或以不同方式实例化?提前谢谢

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();
    }
}
``

公共类分支{
公开作废动议(){
if(body.isStanding())//问题:无法访问body
; // 
}
}

我想您可以像下面这样尝试,将值作为参数传递

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
        }
    }
}

您可以通过在实例化包含的类时传递其引用来访问容器方法。因此,您可以将
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>
    }

}

我想您也可以尝试使用public void takeStep(){if(isStanding())leg.move();}
body
main
方法的局部变量。它不能在方法外部可见。
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>
    }

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