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