Problem mit Vererbung

Status
Nicht offen für weitere Antworten.

Lordy

Mitglied
Ich bastel mir hier gerade etwas und hab mir für verschiedenen Daten eine Oberklasse Data angelegt. Von der Klasse bilde ich nun verschiedene Unterklassen für speziella Daten.

DataA, DataB, DataC erben von Data.

Nun muss ich Daten prüfen und habe mir dafür die Oberklasse DataCheck geschrieben. Von dieser bilde ich nun entsprechende Unterklassen.

DataCheckA, DataCheckB, DataCheckC von DataCheck.

DataCheck prüft die Daten von Data, bei den anderen Klassen erfolgt das ganze analog. Da die Überprüfung erstmal gleich sein soll, dachte ich mir, kann ich das ganze in den Oberklassen implementieren und vererbe das ganze einfach und es läuft dann, ist aber leider nicht der Fall.

Hier mal ein Beispiel:
Die Oberklasse Data
Code:
public class Data {
    
    private String _id;
    private String _value;
    
    public Data(String id, String value){
        _id = id;
        _value = value;
    }
    
    public String getId(){
        return _id;
    }
    
    public String getValue(){
        return _value;
    }
}

Nun die geerbte Klasse DataA
Code:
public class DataA extends Data {
    
    public Data(String id, String value){
       super(id, value);
    }
}

Nun meine DataCheck
Code:
public class DataCheck {
    
    public boolean checkId(Data data, String id){
        if(data.getId().equals(id){
          return true;
        }
        else{
          return false;
        }
    }
}

DataCheck klappt für Data, nun will ich da draus DataCheckA erzeugen.

Code:
public class DataCheckA extends DataCheck {
    
    public boolean checkId(DataA data, String id){
        super.checkId(data, id);
    }
}

So könnte ich mir ne Menge Arbeit sparen, weil das ganze eigentlich wesentlich komplexer ist. Mir ist schon klar, dass DataCheck Data als Datentyp erwartet aber da DataA ja von Data erbt, müsste das doch eigentlich gehen oder? Es kommt nämlich der Typenfehler, also DataA ist nicht Data.
Kennt da jemand eine Lösung für? Wäre echt klasse, weil ich will eigentlich nicht 20 mal das gleiche schreiben und wenn ich nur ne Kleinigkeit ändere, muss ich das alles kopieren und in den anderen Klassen auch ergänzen. Sollte man ja eigentlich bei OOP vermeiden können.

Ich hoffe mal, dass das ganze verständlich geschrieben ist und mir jemand helfen kann.

Viele Grüße aus Hamburg!
 

Murray

Top Contributor
Wenn die check-Methode in den abgeleiteten Klassen ohnehin nichts anderes tut als in den Basisklasse: warum sollte sie dann in den abgeleiteten Klassen überhaupt überschrieben werden?
 

Lordy

Mitglied
Ich hab mir gedacht, ich könnte so dann den anderen Typ übergeben aber da lag ich ein bisschen falsch.

Es ist immer ein Typfehler, DataCheck erwartet Data und nicht DataA. Irgendwo hab ich mal gelesen, dass man bei Vererbung den abgeleiteten Klassen so wie oben beschrieben verwenden kann, da sie ja den gleichen Ursprung haben.

Hat irgendwer noch ne Idee, wie ich das Problem lösen kann?
 

Landei

Top Contributor
Geht das?
Code:
public class DataCheck<D extends Data> { 
    
    public boolean checkId(D data, String id){ 
        if(data.getId().equals(id){ 
          return true; 
        } 
        else{ 
          return false; 
        } 
    } 
}

Code:
public class DataCheckA extends DataCheck<DataA> { 
    
    public boolean checkId(DataA data, String id){ 
        super.checkId(data, id); 
    } 
}
 

Lordy

Mitglied
Super, vielen Dank! Jetzt klappt es. Wieder was dazu gelernt, wusste gar nicht, dass ich da noch expliziet nen Datentyp angeben kann.
Das D im ersten Code Bereich in Zeile 2 ist doch als Variable zu verstehen oder?
 
D

diel2001

Gast
Code:
public class DataA extends Data {
   
    public Data(String id, String value){ // public Data muss public DataA heißen
       super(id, value);
    }

den Konstruktoten werden nicht vererbt
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Analysemuster - Welches nehme ich für diese Problem? Softwareentwicklung 0
L Design Patterns zu abstraktem Problem Softwareentwicklung 2
C Regex Problem Softwareentwicklung 1
TheJavaKid RegEx Problem Softwareentwicklung 2
C Regex-Problem Softwareentwicklung 24
C GIT Einstieg - Problem Softwareentwicklung 12
H Problem mit jsp:setproperty Softwareentwicklung 10
B Regex-Problem mit replace außerhalb des matching bereichs liegender Zeichenketten Softwareentwicklung 2
Landei MS-Access-Problem Softwareentwicklung 3
TiME-SPLiNTER Banales regEx-Problem Softwareentwicklung 2
A 8 Damen Problem (Backtracking) Softwareentwicklung 2
U xmlvm-Problem: Der erzeugte Obj-C-Code erzeugt Fehler in Apple's Xcode SDK Softwareentwicklung 3
S Subversion und Source Folder Problem. Softwareentwicklung 6
G PHP Problem: Geltungsbereich von Variablen Softwareentwicklung 3
C Ein Problem mit der RSA Versschlüsselung Softwareentwicklung 3
W Problem mit Umlauten in xml Dateien auf englischen Systemen Softwareentwicklung 7
H Problem Programmieren Softwareentwicklung 12
H Problem mit eclipse Softwareentwicklung 3
M IllegalStateException - Problem mit GUI und Observer pattern Softwareentwicklung 4
B JavaScript/JSON Problem Softwareentwicklung 2
m@nu Problem mit einer RegEx Softwareentwicklung 4
MTiN Problem mit Rot/Schwarz-Baum Softwareentwicklung 1
F Problem mit DOS-Box Softwareentwicklung 2
A Problem mit Datum-Formatierung Softwareentwicklung 2
K Knapsack Problem: Algorithmus? Softwareentwicklung 7
M Traveling Salesman Problem Softwareentwicklung 6
S Problem PJIRC java-applet Softwareentwicklung 4
rambozola problem mit division in oracle Softwareentwicklung 2
Icewind Problem mit der OOP Softwareentwicklung 4
G Problem mit ActionListener Softwareentwicklung 7
C Mysql-Frage(Problem mit nicht durchgeführten Zugriff) Softwareentwicklung 5
looparda Komposition an Stelle von Vererbung Softwareentwicklung 5
L Vererbung und Ausgabe Softwareentwicklung 3
G vererbung und private Softwareentwicklung 6
A Vererbung Softwareentwicklung 18
R klassen vererbung Softwareentwicklung 3

Ähnliche Java Themen


Oben