(Greenfoot ) Als Actor auf Welt Methode zugreifen?

1 Antwort

Das ist nur möglich, wenn der Subactor über eine Instanz der Subworld verfügt. Diese könntest du bspw. über den Konstruktor überreichen, wenn eine Instanz des Subactors erzeugt wird.

class SubActor extends Actor {
  World world;

  public SubActor(World world) {
    this.world = world;
  }
}

class SubWorld extends World {
  public void doSomething() {
  }
}

// creation:
SubWorld world = new SubWorld();
SubActor actor = new SubActor(world);

Eine weitere Übergabemöglichkeit wäre über eine Methode:

class SubActor extends Actor {
  World world;

  public void setWorld(World world) {
    this.world = world;
  }
}

// creation:
SubWorld world = new SubWorld();
SubActor actor = new SubActor();
// ...
// later:
actor.setWorld(world);

Jedoch solltest du dann, bevor du das Attribut world benutzt, stets einen Nullcheck machen, falls es noch nicht definiert sein sollte.

if (world != null) {
  world.doSomething();
}

Prinzipiell reicht vielleicht auch nur eine temporäre Übergabe:

class SubActor extends Actor {
  void doSomethingWhatActorsLikesToDo(World world) {
    world.doSomething();
  }
}

// creation:
SubActor actor = new SubActor();
SubWorld world = new SubWorld();
// later:
actor.doSomethingWhatActorsLikesToDo(world);

All dies setzt voraus, dass du eine Instanzmethode aufrufen möchtest, die nach außen hin sichtbar ist.