Vererbung Liste, die Klassen beinhaltet, die aus anderen erbt

  • Themenstarter Themenstarter mickedplay
  • Beginndatum Beginndatum
M

mickedplay

Gast
Moin,

da ich die Folgenden Dinge noch nie benutzt habe, frage ich hier einmal kurz nach.

Ich brauch eine Liste (ArrayList), die nur Klassen enthält, die alle aus ein und der selben "Mutterklasse" erben.
Sprich, hier ein Beispiel:

Java:
// Nuesse = Mutterklasse, existierendeNuesse = Listenname
List<? extends Nuesse> existierendeNuesse = new ArrayList<? extends Nuesse>();

public class Walnuss extends Nuesse {... blabla ...}
public class Erdnuss extends Nuesse {... blabla ...}
public class Haselnuss extends Nuesse {... blabla ...}

existierendeNuesse.add(new Walnuss(...));
existierendeNuesse.add(new Erdnuss(...));
existierendeNuesse.add(new Haselnuss(...));
Und über die ArrayList möchte ich dann auf die einzelnen "Unternüsse" (sprich Walnuss, Erdnuss, Haselnuss) zugreifen.

Wie gesagt, ich habe es vorher noch nie benutzt, weiß dementsprechend auch nicht, nach welchem Stichwort im Internet gesucht werden kann.

Danke für Antworten und einen schönen 03. Oktober! 🙂
 
Zuletzt bearbeitet von einem Moderator:
falls explizit prüfen willst, ob es sich bei der nuss um eine bestimmte handelt, kannst du instanceof verwenden
Java:
Nuesse nuss = .... ;
if(nuss instanceof Walnuss) {
  Walnuss walnuss = (Walnuss)nuss; // typecast
}

Ansonsten solltest du mal genauer erklären was du genau erreichen möchtest
 
falls explizit prüfen willst, ob es sich bei der nuss um eine bestimmte handelt, kannst du instanceof verwenden
Java:
Nuesse nuss = .... ;
if(nuss instanceof Walnuss) {
  Walnuss walnuss = (Walnuss)nuss; // typecast
}

Ansonsten solltest du mal genauer erklären was du genau erreichen möchtest
Hab ich doch?

Ich möchte eine Liste mit Klassen, die aus ein und der selben Klasse erben.
 
Was spricht dann gegen:
Java:
List<Nuesse> existierendeNuesse = new ArrayList<Nuesse>();
?

Auf eine Liste wie:
Java:
List<? extends Nuesse> = ...
hast du keinen schreibenden Zugriff. Das einzige was du einfügen kannst ist null.
 
Was spricht dann gegen:
Java:
List<Nuesse> existierendeNuesse = new ArrayList<Nuesse>();
?

Auf eine Liste wie:
Java:
List<? extends Nuesse> = ...
hast du keinen schreibenden Zugriff. Das einzige was du einfügen kannst ist null.
Dass es nicht geht. Das spricht dagegen.
 
Ich möchte eine Liste mit Klassen, die aus ein und der selben Klasse erben.
Und genau das hast du dort.
Java:
List<Nuesse> liste = new ArrayList<Nuesse>();
liste.add(new Walnuss());
liste.add(...);
...
Die liste enthält jetzt objekte der jeweiligen unterklassen von nuesse.
Auf die einzelnen Objekte kannst du nun z.b. per index zugreifen: liste.get(index)
Oder per schleife kannst du auch alle durchgehen:
Java:
for(Nuesse nuss : liste) { ... }
Was genau willst du mit der Liste machen? Was genau geht nicht? etc.
 
Und genau das hast du dort.
Java:
List<Nuesse> liste = new ArrayList<Nuesse>();
liste.add(new Walnuss());
liste.add(...);
...
Die liste enthält jetzt objekte der jeweiligen unterklassen von nuesse.
Auf die einzelnen Objekte kannst du nun z.b. per index zugreifen: liste.get(index)
Oder per schleife kannst du auch alle durchgehen:
Java:
for(Nuesse nuss : liste) { ... }
Was genau willst du mit der Liste machen? Was genau geht nicht? etc.
Gut, ich erkläre es noch einmal anders anhand eines anderen Beispiels.

Beispiel:
Ein Spiel beinhaltet 8 Teilnehmer.

Nun habe ich:
1. 2x Walnüsse
2. 2x Erdnüsse
3. 2x Haselnüsse
4. 2x Mandeln

Da diese 8 Dinge alle Nüsse sind, erben sie aus der "Nuesse"-Klasse.
Nun möchte ich jedem Spieler eine zufällige Nuss zuteilen, sodass jeder eine am Ende hat.
Dementsprechen wollte ich die Nüsse in eine Liste packen, um sie zufällig zu vergeben.
Da ich aber nicht die "Nuss" an sich, sondern die einzelnen genaueren Früchte (Walnuss, Erdnuss, Haselnuss & Mandel) vergeben möchte, muss ich diese in eine Liste packen. Und da sie alle eine unterschiedliche Klasse besitzen, wollte ich wissen, wie ich eine Liste erstellen kann, die eine Frucht (die aus "Nuesse" erbt) beinhaltet.
 
die liste beinhaltet deine genaueren nüsse. Da sie aber verschiedene klassen sind, welche dieselbe elternklasse haben, ist liste eben von der elternklasse. Um nun deine Nüsse wieder als die exakte klasse ansprechen zu können, musst du sie casten:
Java:
Nuesse nuss = liste.get(0);
if(nuss instanceof Walnuss) {
 Walnuss walnuss = (Walnuss)nuss;
}

Ansonsten ist die Frage ob es wirklich nötig ist jede nuss durch eine andere Klasse darzustellen.
Möglicherweise reicht auch sowas:
Java:
public enum NussTyp {
  Walnuss, Erdnuss, ...
}
public class Nuss {
  private NussTyp typ;
  public Nuss(NussTyp typ) {
    this.typ=typ;
  }
}
Und dann sowas wie: Nuss walnuss = new Nuss(NussTyp.Walnuss);
 
Hat sich erledigt, hatte die ganze Zeit nen Denkfehler, deswegen dachte ich, dass ich das noch nie zuvor genutzt hatte.
 

Neue Themen


Zurück
Oben