2 methoden mit gleichen namen und ein Interface

sengul

Bekanntes Mitglied
Hallo,
meine Problem ist. Ich habe ein Interface Generator mit der Methode Zufallszahl. Diese methode Zufallszahl wird in zwei Klassen mit selben namen auf zwei unterschiedliche weise implementiert. Nun möchte ich in der Klasse A diese methode Zufallszahl einmal rufen, aber welcher implementation zum einsatz kommt, soll wahrend der laufzeit festgelegt werden. Wie kann ich das machen? Ich selber komme nicht drauf, kann mir das jemand mit einem beispiel erklaren.
Vielen Dank
 
Ein Interface musst du ja immer in einer Klasse Implementieren.
Und wenn du von der Klasse ein Objekt erzeugst, hat dein Objekt ja einen Namen.
Also als Beispiel:
Java:
public class TEST {
  public static void main(String[] args) {
    Generator k1 = new Klasse1();
    Generator k2 = new Klasse2();

    //Hier wird das dann festgelegt:
    System.out.println(k1.getZufallsZahl()); 
    System.out.println(k2.getZufallsZahl());
  }
}
Java:
public interface Generator {
  public int getZufallsZahl();
}
Java:
public class Klasse1 implements Generator {

  @Override
  public int getZufallsZahl() {
    return 0;
  }

}
Java:
public class Klasse2 implements Generator {

  @Override
  public int getZufallsZahl() {
    return 1234;
  }

}

So mein ich das.

Die Methoden getZufallszahl musst du halt anders füllen, aber so wie das hier ist, kannst du sofort sehen, welche Methode ausgeführt wird.

Ich bin mir nicht sicher, ob ich deine Frage richtig verstanden hab. 😳
 
Also wie du das gemacht hast, ist es doch so das ich es angebe welche Implementation der methode getZufallsZahl() zum Einsatz kommt oder ? Aber in der Aufgabe steht: Welche konkrete Implementierung zum Einsatz kommt, soll dabei zur Laufzeit festgelegt werden.
 
Hmmm was ist denn die Anforderung, wie soll man das denn zur Laufzeit bestimmen? Soll man einen Button drücken oder aus einer Checkbox auswählen, oder einfach irgendeine zufällige Implementation nehmen?
 
Gute frage, ich verstehe auch ganz was in der aufgabe erwünscht ist! Vielleicht verstehe ich es falsch? unten ist die Aufgabe

Erweitern Sie Ihre Klasse Zufallszahl aus Aufgabe 2 um die Unterstützung für verschiedene Zufallszahl-Generatoren. Erstellen Sie dazu eine Schnittstelle ZufallszahlGenerator, die eine Methode zur Berechnung einer Zufallszahl definiert. Erstellen Sie anschließend mindestens zwei verschiedene Klassen, die diese Schnittstelle implementieren und auf jeweils unterschiedliche Weise eine Zufallszahl erzeugen. Eine mögliche Implementierung können Sie aus Aufgabe 2 übernehmen, die Zufälligkeit der erzeugten Zahlen steht aber bei dieser Aufgabe nicht im Vordergrund (beispielsweise könnte Ihre Implementierung auch stets die gleiche „Zufallszahl“ 42 zurückliefern). Ändern Sie nun die Klasse Zufallszahl so ab, das sie die Berechnung der Zufallszahl an eine beliebige, die Schnittstelle ZufallszahlGenerator implementierende Klasse delegiert. Welche konkrete Implementierung zum Einsatz kommt, soll dabei zur Laufzeit festgelegt und geändert werden können.
 
So könnte es gemeint sein 😉
Java:
public class KlasseA {

   private Generator generator;
   
   public void setGenertor(Generator generator) {
       this.generator = generator;
   }
   
   public void doSomething() {
       generator.zufallszahl();
   }
   
   public static void main(String[] args){
       KlasseA a = new KlasseA();
       
       do
       {
           Generator gen = null;
           String implToUse = lies von der Konsole
           if(implToUse.equals("impl1")) {
               gen = new DeineKlasseMitImplementierung1();
           } else if(implToUse.equals("impl2") {
               gen = new DeineKlasseMitImplementierung2();
           } else {
               gen = new StandardImplementierung();
           }
           
           a.setGenerator(gen);
           a.doSomething();
       }while(...);
   }
}

Du hast deine X Klassen, welche das Interface implementieren.
Eine Klasse hat ein Attribut vom Typ des Interfaces. Dieses Attribut kann mit dem Objekt einer Klasse belegt werden, welches das Interface implementiert.
Von welcher deiner X Klasse du nun ein Objekt erstellst könnte zum Beispiel per switch entschieden werden oder ähnlichem.
 
Zuletzt bearbeitet:

Zurück
Oben