Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden

NecroniX

Mitglied
Hallo zusammen,

wie der Titel schon sagt hab ich ein grad ein Problem (eher ein Problemchen^^) was das casten angeht.
Ich habe verschiedene Subclasses die alle von einer Superclasse abgeleitet sind, die Objekte der Subclasses hab ich in die Superclass gecastet um sie alle gemeinsam in eine List zu packen. Nun nachdem alle in der List sind sollen sie wieder herausgeholt werden, nur wie kann ich jetzt unterscheiden welcher Subclass sie vorher angehörten ?
Eine Lösung die mir selbst einfiel war ein eigenes Attribut(String) zu erstellen und dieses eben mit dem Klassennamen zufüllen, die Lösung erscheint mir aber als in ein gewissen Weise doch sehr komisch da z.B. die normalen Javaklassen eben solch eine Eigenschaften nicht enthalten aber trotzdem intern korrekt gecastet werden.
Was ist hier die praktikabelste Lösung, bzw wie würdet ihr das Problem lösen ?

Vielen Dank jetzt schon mal für's antworten :)

MfG
NecroniX
 
M

maki

Gast
Warum musst du unterscheiden?
Sollten die unterscheidlichen Subklassen nicht selbst definieren wie sie sich verhalten?
 

Timothy Truckle

Top Contributor
Ich habe verschiedene Subclasses die alle von einer Superclasse abgeleitet sind, die Objekte der Subclasses hab ich in die Superclass gecastet um sie alle gemeinsam in eine List zu packen. Nun nachdem alle in der List sind sollen sie wieder herausgeholt werden, nur wie kann ich jetzt unterscheiden welcher Subclass sie vorher angehörten ?
Da wäre meine erste Frage: wozu?

Eine Lösung die mir selbst einfiel war ein eigenes Attribut(String) zu erstellen und dieses eben mit dem Klassennamen zufüllen, die Lösung erscheint mir aber als in ein gewissen Weise doch sehr komisch da z.B. die normalen Javaklassen eben solch eine Eigenschaften nicht enthalten
Was denkst Du, was
Code:
getClass()
zurückgibt?
Was ist hier die praktikabelste Lösung bzw wie würdet ihr das Problem lösen ?
bessere Option: verschiebe die Logik, die den "wahren Typ" der Objekte kennen muss in die jeweilige Klasse in eine Methode, die in der Basisklasse abstract ist.

schlechtere Option: method overloading:
Java:
void haddleList(List<BasisType list){
 for (BasisType element : list);
   handleElement(element);
}
private void handleElement(BasisType element){
  throw new IllegalArgumentException("unknown element type: "+element.getClass().getName());
}

private void handleElement(BasisTypeExtension1 element){
 element.callMethodOfBasisTypeExtension1();
}

private void handleElement(BasisTypeExtension2 element){
 element.callMethodOfBasisTypeExtension2();
}

private void handleElement(BasisTypeExtension2 element){
 element.callMethodOfBasisTypeExtension2();
}

bye
TT
 

NecroniX

Mitglied
@Timothy Truckle

Erst mal Danke für die doch sehr hilfreiche Antwort, aber könntest du dir bitte nochmal meine konkrete Anwendung im Bezug auf diese Frage anschauen?!

Java:
class abstract GraphicalElement{
    public void paint(){
    ...
    }
}

class Unit extends GraphicalElement{
    public void paint() {
    ...
    }
    public void shoot() {
    ...
    }
    //weitere Methoden sind aber in dem Bezug unwichitg
}

class Obstacle extends GraphicalElement{
    public void paint() {
    ...
    }
    //wieder weitere Methoden
}

Diese 2 Subclasses (Unit und Obstacle) sollen nun erst in eine List,also zu GraphicalElement casten, und später wieder herausgeholt werden, nun muss ich die entsprechende Klasse wieder in ihre alte Subclass zurückcasten, da ich ja z.B. wieder auf die Methode shoot zugreifen will. In wie fern sollte ich dies jetzt am besten lösen ? Mit get_class() oder doch irgendwie anders ?
 

Timothy Truckle

Top Contributor
In wie fern sollte ich dies jetzt am besten lösen ? Mit get_class() oder doch irgendwie anders ?
Du braucht einen komplett anderen Ansatz:
ich vermute, dass die Liste, die Du hast das "Spielfeld" representieren soll und alle darstellbaren Objekte enthält.
Ich würde eine zweite Liste nur mit Units führen ud über diese iterieren, wenn geschossen wird.

bye
TT
 

NecroniX

Mitglied
Sollte ich dann 2 Listen führen, wo in der einen beide Elemente als Superclass eingetragen sind und in der anderen separat die einzelnen Units, oder doch eher nur eine Liste für Obstacles und die andere nur für Units ?
 
T

tröööt

Gast
man könnte auch mit generics oder interfaces arbeiten ... sinn bleibt der selbe wie bei ner abstract super-class ...

es gibt eine definierte methode "doIt()" die im interface / in der super-class definiert ist ...

die jeweiligen implementierungen müssen nun selbst entscheiden was passiert wenn "doIt()" gecallt wird ...

willst du allerdings methoden von sub-klassen auf ein objekt callen das in die super-klasse gecastet wurde hilft nur umständliches instanceof und wieder runter-casten ...
 

Timothy Truckle

Top Contributor
Sollte ich dann 2 Listen führen, wo in der einen beide Elemente als Superclass eingetragen sind und in der anderen separat die einzelnen Units, oder doch eher nur eine Liste für Obstacles und die andere nur für Units ?
Wenn (wie ich vermute) Deine jetzige Liste (auch) zum Zeichnen der Elemente genutz wird solltest Du die so beibehalten. Auch für die Suche, ob Du jetzt ein Hindernis oder eine Unit getroffen hast ist diese Liste gemeinsame Liste sinnvoll.

bye
TT
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Verschiedene Optionen in der Methode Java Basics - Anfänger-Themen 6
K Umrechnung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 39
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben