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