2013-10-04 80 views
0

我想使用組合來分解功能,但不知道如何引用回「封裝」類(不知道什麼是級別在構圖中被稱爲)。這是一個人爲的例子,身體可以看到腿部方法,但腿部看不到身體方法。我是否必須更改訪問修飾符或以不同的方式實例化?提前致謝。如何從「has-a」(包含)類訪問「容器」方法

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

我想你也可以嘗試像公共無效takeStep(){ \t如果(isStanding() ) \t \t leg.move(); } – upog

+0

'body'是'main'方法的**局部**變量。在方法之外無法看到它。 –

回答

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

} 

你會內實例化LegBody作爲

public Body() { 
    leg = new Leg(this); 
} 
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 
     } 
    } 
}