Superklasse nochmals erzeugen?

Fohnbit

Top Contributor
Hallo!

Ich habe eine Bytearray. Darin sind Informationen verschiedensten Inhaltes.
Die Informationen darin kann man in 10 Gruppen einteilen, die teilweise selbe Inhalte haben und teilweise komplette verschieden sind. Je nach Gruppe müssen die Informationen komplett anders bearbeitet werden.

Ich nehmen das Beispiel eines Autos:
Auto ist meine Superklasse.
PKW, LKW, NASCAR sind die Typen(Gruppen).

Auto ist die Superklasse, die anderen 3 erben diese und sind die Subklassen.

Nun kann ich nicht:
PKW pkw = new PKW();
ausführen, da ich erst im Byte Array nachsehen muss, um welchen Typ es sich handelt. Das Bytearray würde ich aber in der Superklasse speichern.
Außerdem müssten alle Methoden für jede Gruppe überschrieben werden.

Nun müsste ich:
Auto auto = new Auto();
auto.rawPaket = "Bytearray"
If (auto.rawPaket == 1) { // Gruppe 1
Auto auto = new PKW();
auto.rawPaket = "Bytearray"
}

Nachfolgende Methoden können als Parameter "Auto" haben, und in der Methode muss dann geprüft werden, welche Klasse Auto enthält.

Mir kommt die Instanzierung jedoch alles andere als logisch vor.

Wie würdet Ihr das machen?

Danke!
 

anti-held

Bekanntes Mitglied
Wie kommt dieses ByteArray denn in dein Auto-Objekt?
Schildere bitte doch anhand eines Beispiels, was du für Daten vorher hast,
und was dein Ausgangsergebnis sein soll.
 

Fohnbit

Top Contributor
Hallo!

Ich kann später ein Beispiel anhängen.
Hintergrund ist aber, das in der Superklasse eine Methode enthalten ist, das das Bytearray zerlegt und ausgibt, um welche Subklasse es sich handelt.

Jedoch kann ich die Superklasse ja nicht erzeugen, da ja die Subklasse erzeugt werden soll.

Im Moment muss ich die Methode aus der Superklasse rausnehmen damit vor Erzeugung des Objektes geprüft wird, welche Subklasse erzeugt werden soll.

Danke!
 

anti-held

Bekanntes Mitglied
Deine Vererbung sollte z.B. so funktionieren:

Dein Auto weiß dass es einen Typ hat.
Also [c]private final String typ;[/c]
Der Wert wird im Konstruktor übergeben (z.B. [c]Auto(String typ)[/c])

Im Konstruktor vom Subtyp PKW wird dann der super-Konstruktor immer mit z.B. [c]super("PKW");[/c] aufgerufen.
Im Konstruktor vom Subtyp LKW wäre das dann [c]super("LKW");[/c].

Was das Auto für einen Typ hat kannst du dann durch einen Getter auf den Typ ausgeben oder per [c]instanceof[/c] abfragen.

Wenn du deine Autos erstellt, kannst du ja durch deine Arrays durchitereieren und dann mit einem switch den passenden Konstruktor wählen

z.B.

Java:
Auto auto = null;
switch(bytearray[1]){
case 0:
   auto = new PKW();
   break;
case 1:
   auto = new LKW();
   break;
case 2:
   auto = new NASCAR();
   break;
default:
   throw new UnsupportedTypeException("Der Typ " + bytearray[1] + " ist nicht bekannt.");
}
 

Fohnbit

Top Contributor
Hallo!

Ja, so habe ich es aktuell.
Die Information, welcher Typ es ist, ist leider nicht einfach ein Integer, sondern muss teilweise komplex eruirt werden.

Diese Methoden zum erruieren des Typs sind in der Superklasse enthalten, da nach dem erzeugen diese wieder auch benötigt werden.

Ich muss also diese Methoden rauslösen, damit ich den Typ bestimmen kann.

Danke!
 

KSG9|sebastian

Top Contributor
Woah gruselig was du da vorhast.

Mit Vererbung bildet man sowas definitiv nicht ab. Du solltest die Logik um das Bytearray zu zerpflücken auslagern.

Java:
class ByteToObjectTransformer {
    
    public List<Auto> createCars(byte[] raw){
        ...
    }
}

class Pkw extends Auto { }
class Lkw extends Auto { }

class Main {
     public void main(String[] args){
         byte[] raw = getRawData();

         List<Auto> cars = new ByteToObjectTransformer().createCars(raw);
         ...

     }
}
 

KSG9|sebastian

Top Contributor
Hallo!

Ja, so habe ich es aktuell.
Die Information, welcher Typ es ist, ist leider nicht einfach ein Integer, sondern muss teilweise komplex eruirt werden.

Diese Methoden zum erruieren des Typs sind in der Superklasse enthalten, da nach dem erzeugen diese wieder auch benötigt werden.

Ich muss also diese Methoden rauslösen, damit ich den Typ bestimmen kann.

Danke!

Warum sind die Methoden in der Superklasse? Was haben die Methoden mit dem Auto gemeinsam bzw. warum werden diese benötigt?

Die Klasse sollte nichts über ihre eigene Repräsentation in irgendwelchen byte-Arrays wissen. Schließlich könnte die Klasse ja in 3 Wochen als JPA-Entity persistiert werden...
 

Fohnbit

Top Contributor
Hallo!

Nun, die Eruiirung setzt sich aus vielen Methoden zusammen. Ein Teil sind in anderen Packages, ein Teil in eben der Superklasse.

Ich werde eben versuchen die internen in andere Klassen zu packen, damit diese außerhalb der Superklasse ist.

Bei deinem Beispiel muss die Methode createCars aber eben die Klasse Pkw oder Lkw zurückgeben, oder?
Als Laie kommt mir dein Code nicht soviel anders vor :bahnhof:

Einzig benutzt du eine separate Klasse zum erkennen des Typs, oder?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
C Initialiseren einer Superklasse Java Basics - Anfänger-Themen 2
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
Kirby.exe Methode aus Superklasse benutzen Java Basics - Anfänger-Themen 18
V Vererbung Subklasse soll Superklasse verändern Java Basics - Anfänger-Themen 2
F Java - Superklasse BUG Java Basics - Anfänger-Themen 1
M Vererbung Superklasse -> Subklasse Java Basics - Anfänger-Themen 3
D Compiler-Fehler Konstruktor von Superklasse übernehmen Java Basics - Anfänger-Themen 1
P auf superklasse zugreifen Java Basics - Anfänger-Themen 24
C Superklasse und Klassen ausgeben Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
D Instanz einer Subklasse anhand deren Superklasse Java Basics - Anfänger-Themen 5
A Array in Subklasse - Werte aus Superklasse Java Basics - Anfänger-Themen 4
gamebreiti Problem mit Setter in Superklasse Verkettung der Kostruktoren??? Java Basics - Anfänger-Themen 7
R Vererbung Übergabe von Variablen der Superklasse an Subklasse mit "extends" Java Basics - Anfänger-Themen 5
A Vererbung Wie auf Variablen der Superklasse zugreifen? Java Basics - Anfänger-Themen 10
M Vererben von Superklasse ohne Konstruktor Java Basics - Anfänger-Themen 9
G Auf einen bestimmten Konstruktor in der abstrakten Superklasse zugreifen? Java Basics - Anfänger-Themen 2
W Superklasse Konstruktor Java Basics - Anfänger-Themen 9
K Methodenvererbung durch eine Superklasse Java Basics - Anfänger-Themen 7
M OOP Klasse mit Superklasse instanzieren Java Basics - Anfänger-Themen 3
D Klassen Problem - Übergabe an Konstruktor von Superklasse Java Basics - Anfänger-Themen 2
E Der Konstruktor der Superklasse Java Basics - Anfänger-Themen 8
K Polymorphie Objektreferenz als Superklasse anstatt des Objekttypes Java Basics - Anfänger-Themen 12
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
J Subklasse soll alle Klassen/Pakete der Superklasse importieren Java Basics - Anfänger-Themen 3
G Vererbung mit einer Instanz aus der Superklasse Java Basics - Anfänger-Themen 2
G Zugriff auf Superklasse Java Basics - Anfänger-Themen 13
N Zugriff auf Vaiablen inhalte der superklasse Java Basics - Anfänger-Themen 7
C jar nicht nochmals öffnen Java Basics - Anfänger-Themen 2
A Nochmals arrays Java Basics - Anfänger-Themen 5
W Javadoc HTML erzeugen mit allen dependency Java Basics - Anfänger-Themen 11
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Erzeugen einer eindeutigen ID Java Basics - Anfänger-Themen 2
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
L Simples Spielfeld erzeugen Java Basics - Anfänger-Themen 1
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Objekt aus String-Array erzeugen Java Basics - Anfänger-Themen 104
S Mit nextGaussian() positive Zahlen erzeugen? Java Basics - Anfänger-Themen 39
S Array erzeugen mit verschiedener Verteilung Java Basics - Anfänger-Themen 11
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
K Methoden JTExtField mit Array erzeugen Java Basics - Anfänger-Themen 13
B Kann man eine Tabelle in Eclipse erzeugen und damit arbeiten? Java Basics - Anfänger-Themen 8
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
I TextField Array mit for Loop erzeugen Java Basics - Anfänger-Themen 4
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
G Objekt der selben Klasse wie selbst mit Aufrufen des Konstruktors erzeugen Java Basics - Anfänger-Themen 14
J Eindeutige Nummer (8 stellig) erzeugen Java Basics - Anfänger-Themen 9
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
neerual Int-Felder erzeugen Java Basics - Anfänger-Themen 16
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
D Erste Schritte Random erzeugen Java Basics - Anfänger-Themen 28
P Objekt mit =new in Methode erzeugen Java Basics - Anfänger-Themen 4
L Threads Laufbild Erzeugen Problem mit Aktualisieren des JPanels Java Basics - Anfänger-Themen 2
J In Java einen Ton erzeugen Java Basics - Anfänger-Themen 8
C Array Muster erzeugen Java Basics - Anfänger-Themen 2
S Objekte "gegebenfalls" erzeugen Java Basics - Anfänger-Themen 5
D Java Ausdruck erzeugen / Formular Java Basics - Anfänger-Themen 4
N Objekt in Methode einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
R Baum erzeugen Java Basics - Anfänger-Themen 61
D Objekt per If erzeugen. Java Basics - Anfänger-Themen 11
J Bildschirmausgabe erzeugen Java Basics - Anfänger-Themen 30
B Beliebig viele Rechtecke erzeugen Java Basics - Anfänger-Themen 5
J Objekt mit Methodendruchlauf erzeugen Java Basics - Anfänger-Themen 1
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
P Erste Schritte [gelöst]Erzeugen einer Klasse aus der Klassenbibliothek Java Basics - Anfänger-Themen 4
C Int mit vorangestellten Nullen und maximal 4 stellen erzeugen. Java Basics - Anfänger-Themen 4
P Input/Output Objekte per Eingabe erzeugen Java Basics - Anfänger-Themen 1
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
U JNA: Strukturen erzeugen Java Basics - Anfänger-Themen 8
S Variablen Variable erzeugen und Array mit Variablen befüllen Java Basics - Anfänger-Themen 26
S Header- Datei erzeugen mit javah Java Basics - Anfänger-Themen 1
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
R Erste Schritte Schleife erzeugen (mit If Anweisung) Java Basics - Anfänger-Themen 3
I HTML Tabelle nur so lange erzeugen bis Höhe erreicht Java Basics - Anfänger-Themen 9
M Zusatzzahlen in array erzeugen Java Basics - Anfänger-Themen 5
B Stützstellen (Vektor) erzeugen? Java Basics - Anfänger-Themen 8
Z Erste Schritte 9x9 Felder Erzeugen+Aufrufen Java Basics - Anfänger-Themen 1
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
J Anzahl von for-Schleifen in Abhängigkeit von Zahleneingabe erzeugen Java Basics - Anfänger-Themen 1
J JLabels in schleife erzeugen mit verschiedenen namen? Java Basics - Anfänger-Themen 5
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
F Input/Output Blocking file read erzeugen Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben