OOP verschiedene Objekttypen ablegen

joe_roemer

Mitglied
Hallo,
ich habe folgendes Problem:
Ich habe drei Klassen, die von einer Superklasse erben.
Die drei Subklassen unterscheiden sich nur durch die implementierten Methoden.

Ich möchte also wenn ich eine der drei Subklassen instanziiere, nur deren Methoden aufrufen können und nicht die der anderen zwei.
Das funktioniert auch soweit.

Nun möchte ich aber Instanzen aller drei Subklassen in einem Array oder ähnlichem ablegen um leichter darauf zuzugreifen.
Dazu habe ich mir (zum Beispiel) ein Array vom Typ der Superklasse angelegt und die einzelnen Elemente des Arrays vom Typ der Subklassen deklariert.
Wenn ich nun auf die Arrayelemente zugreife, kann ich immer nur auf die Methoden der Superklasse zugreifen und nicht auf die speziellen Methoden der Subklassen.
Diese speziellen Methoden sind ja aber nicht in der Superklasse definiert.
Wo ist mein Denkfehler?

Gruß, Alex
 

joe_roemer

Mitglied
Noch als Nachtrag,
muss ich diese unterschiedlichen Methoden aus den Subklassen in der Superklasse "abstrakt" implementieren?
Es sind aber nicht alle Methoden in allen Subklassen enthalten.

Gruß, Alex
 

Michael...

Top Contributor
Wenn Du ein Objekt vom Typ Superklasse hast, kannst Du nur auf die in der Superklasse definierten Methoden zugreifen, auch wenn das Objekt eigentlich vom Typ einer Subklasse ist.
Eine Möglichkeite wäre das Objekt auf die Subklasse zu casten, dabei sollte man aber wissen von welchen Typ Superklasse das Objekt ist.
Mach doch mal ein konkretes Bsp. das verdeutlicht was genau Du vorhast. Vielleicht kann man das Problem eleganter lösen.
 

joe_roemer

Mitglied
Hi Michael,
ok, ich stelle mal kurz dar worum es geht.
Ich bin dabei für meine digitale Modelleisenbahn eine Steuerung zu schreiben.
Diese soll auch die Signale steuern.
Also habe ich eine Klasse Signal geschrieben mit bestimmten Attributen und Methoden.
Jetzt gibt es aber im Schienenverkehr unterschiedliche Arten von Signalen.
Diese unterscheiden sich darin, daß sie nur bestimmte Zustände annehmen können: rot/grün, rot/gelb, rot/grün/gelb...usw.
Nun habe ich Subklassen geschrieben, die von der Klasse Signal erben.
Zum Beispiel die Sublasse Blocksignal.
Dieses kann alles was die Klasse Signal kann (vererbt), kann aber im Gegensatz zu anderen Signalarten (Subklassen) nur die Zustände rot und grün annehmen, also kein gelb.
Daher soll sie NUR die Methoden setzeAufRot und setzteAufGrün haben.

Eine weitere Subklasse von Signal wäre das Einfahrsignal.
Dieses kann ebenfalls alles was die Klasse Signal kann (vererbt), aber kann die Zustände rot, grün oder gelb annehmen.
Daher soll sie die Methoden setzeAufRot() und setzteAufGrün() und setzeAufGelb() haben.

So will ich erreichen, das bei jeder Art von Signal nur die zulässigen Methoden aufgerufen werden.

Soweit so gut.
Nun möchte ich alle Signale zusammen, also Block- und Einfahrsignale zusammen verwalten.
Daher habe ich ein Array erschaffen, als Beispiel nur mit 2 Elementen:

Signal [] signal = new Signal[2]

Dann habe ich folgendes gemacht:

signal[0] = new BlockSignal();
signal[1] = new EinfahrSignal();

Spreche ich nun signal[0] an, was ja ein Blocksignal sein soll, bekomme ich aber nur die Methoden der Superklasse Signal zu packen, signal[0].setzeAufRot() geht nicht, weil diese in der Subklasse definiert sind.
Ebenso mit signal[1].
Mit Casten bin ich nicht weitergekommen.

Was ich möchte, ist halt alle Signalarten relativ bequem ansprechen bzw. verwalten.
Es muss kein Array sein.

Gruß, Alex
 
G

Gast2

Gast
Das geht mit einem cast:

Java:
Signal[] signal = new Signal[2]

signal[0] = new BlockSignal();
signal[1] = new EinfahrSignal();
...

BlockSignal block = (BlockSignal) signal[0];
EinfahrSignal einfahr = (EinfahrSignal) signal[1];

block.methode1();
einfahr.methode1();

Kannst du auch gleich direkt machen:
Java:
((BlockSignal) signal[0]).methode1();
((EinfahrSignal) signal[1]).methode1();

Aber wirklich schön ist das nicht. Eigentlich musst du auch sicherstellen das der cast gültig ist, classCastExceptions abfangen etc. Ich würde das eher über Interfaces implementieren.

Java:
interface Signal{
  void methode1();
}

class BlockSignal implements Signal{
  public void methode1(){
  ...
}

class EinfahrSignal implements Signal{
  public void methode1(){
  ...
 }
}

Dann kannst du gleich mit dem Signal[] arbeiten:
Java:
Signal[] signal = new Signal[2]

signal[0] = new BlockSignal();
signal[1] = new EinfahrSignal();

signal[0].methode1(); // called methode1 in BlockSignal
signal[1].methode1(); // called methode1 in EinfahrSignal
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
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
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
S klassen in verschiedene Dateien Java Basics - Anfänger-Themen 5
3 Verschiedene Fragen (bin neu hier) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben