Array aus Klasse um vererbte Elemente erweitern

Valerie96

Neues Mitglied
Hallo ihr Lieben,

Ich stehe vor volgendem Problem:

- Es wurde ein Array aus einer Klasse erstellt.
- Diese Klasse hat geerbte Klassen
- Nun sollen im Array der Basisklasse Elemente eingefügt werden, die zur einer geerbten Klasse gehören.

z.B.:
-------------------------------------Hauptkalsse Person:-------------------------------------
public Person(String name, int alter, int grosse) {
this.name = name;
this.alter = alter;
this.groesse = groesse;

-------------------------------------geerbte Klasse Beruf:-------------------------------------
public Sportler(String name, int alter, int grosse, String sportart) {
super(name, alter, grosse, sportart);
this.sportart = sportart;
------------------------------------------------------------------------------

Array ist erstellt: z.B.:

static Person[0] array = new Person[4];

Wie füge ich nun in das Array mit der Basisklasse Elemente der geerbten Klasse hinzu? Folgendes scheint zu funktionieren:

array[0] = new Persob("Sabi", 12, 160, "Tennis");

Nur bei der Ausgabe gibt es dann Fehler. Folgendes funktioniert NICHT: (Es scheitert an: sportart)

System.out.println(array[0].name +" " + array[0].alter +" " +array[0].grosse +" " +array[0].sportart);


Bzw. es ist schlicht nicht möglich, da die Basisklasse nur 3 Elemente beinhaltet..
Was mache ich falsch? Vorgabe ist, dass der Typ des Arrays die Basisklasse sein muss..
 
Na mit super() rufst du ja eben den Konstruktor der Basisklasse auf.
Da diese nicht mit 4 Parametern definiert ist darfst du ihn dann auch nur mit den dreien aufrufen.
Den Fehler dürfte es dann aber eigentlich nicht nur bei der Ausgabe sondern schon bei der Instanziierung geben wenn ich mich gerade nicht irre...
Ansonsten sollte es dann so passen.
 
Ich stehe vor volgendem Problem:

- Es wurde ein Array aus einer Klasse erstellt.
- Diese Klasse hat geerbte Klassen
- Nun sollen im Array der Basisklasse Elemente eingefügt werden, die zur einer geerbten Klasse gehören.
Das ist überhaupt kein Problem. Die abgleitete Klasse steht zur Basisklasse in einer "is-a"-Beziehung. Du sagst also, jeder Sportler ist (auch) eine Person - die Umkehrung gilt natürlich nicht. Aus dem Grund ist
Java:
Person person = new Sportler(...);
zulässig,
Java:
Sportler sportler = new Person(...);
dagegen nicht.

Ob die Personen nun in einem Array gehalten werden oder nicht, spielt natürlich keine Rolle.
 
Ergänzend zur Ausführung von @mihe7 noch:

Dein Array ist vom Typ Person, d.h. wenn du folgendes versuchst:
Nur bei der Ausgabe gibt es dann Fehler. Folgendes funktioniert NICHT: (Es scheitert an: sportart)

System.out.println(array[0].name +" " + array[0].alter +" " +array[0].grosse +" " +array[0].sportart);
dann funktioniert das nicht, weil eben ein Arrayelement (z.B. array[0]) vom Typ Person ist und Person verfügt nicht über die Instanzvariable "sportart".

Du könntest den Typ allerdings casten (umwandeln) mit Sportler sportler = (Sportler)array[0];. Das funktioniert natürlich nur, wenn es sich bei dem im Array gespeicherten Laufzeittypen tatsächlich um einen Sportler handelt.
Java:
// Sportler ist eine Person, darum funktioniert dieses:
Person person = new Sportler(); // der statische Typ ist Person, der Laufzeittyp ist Sportler

System.out.println(person instanceof Person); // true
System.out.println(person instanceof Sportler); // true
System.out.println(person instanceof Pilot); // false

Sportler sportler = (Sportler)person; // der Laufzeittyp von person ist Sportler, darum kann gecastet werden

// Angenommen Pilot erbt ebenfalls von Person
// Dennoch führt dieses zu einer ClassCastException
Pilot pilot = (Pilot)person; // !!!FEHLER!!! Sportler kann nicht zu Pilot gecastet werden!
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben