0

オブジェクトを持つクラスがあります。今度は、コンテナ クラスの外部から Box および Toy オブジェクトから関数を呼び出したいと考えています。

class Container
{
   Box box1 = new Box();
   Toy toy1 = new Toy();
   public void open()
   {
      box1.open();
   }
   public void play()
   {
      toy1.play();
   }
}

メソッドの再作成を回避し、メソッドを Container クラスと共有するだけにするにはどうすればよいですか。2 つ以上のオブジェクトがあるため、継承を使用できません。

4

2 に答える 2

1

あなたは次のようにそれを行うことができます。

public interface ToyInterface {
    public void play();
}

public class Toy implements ToyInterface {
    @Override
    public void play() {
        System.out.println("Play toy");
    }
}

public interface BoxInterface {
    public void open();
}

public class Box implements BoxInterface {
    @Override
    public void open() {
        System.out.println("open box");
    }
}

public class Container implements ToyInterface, BoxInterface {
    private BoxInterface box;
    private ToyInterface toy;

    public Container() {
        box = new Box();
        toy = new Toy();
    }

    public BoxInterface getBox() {
        return box;
    }

    public ToyInterface getToy() {
        return toy;
    }

    @Override
    public void play() {
        System.out.println("play container");
        this.toy.play();
    }

    @Override
    public void open() {
        System.out.println("open container");
        this.box.open();
    }
}

次に、コンテナの外部でBoxおよびToyクラスのメソッドにアクセスできます。

Container container = new Container();
container.open();
container.getBox().open();

container.play();
container.getToy().play();
于 2012-08-02T11:33:51.950 に答える
0

このようにします:

mainまたは、初期化しているところに両方のオブジェクトを渡します Container

public static void main(String args[]){
   Box box1 = new Box();
   Toy toy1 = new Toy();
   Container c = new Container(box1, toy1);
   box1.open();
   toy1.play();
   //or pass both object where ever you want without recreating them
}

class Container {
    Box box1 = new Box();
    Toy toy1 = new Toy();   

    public Container(Box box1, Toy toy1){
        this.box1 = box1;
        this.toy1 = toy1;
    }
}

更新:今、あなたのニーズに応じて次の解決策がありますが、私はこれをするのも好きではありません:

class Container
{
   public Box box1 = new Box(); // should not be public but as your needs
   public Toy toy1 = new Toy(); // should not be public but as your needs
}
container.box1.open();
container.toy1.play();
于 2012-08-02T11:48:18.610 に答える