Alex_winf01 Geschrieben 24. April 2017 Geschrieben 24. April 2017 Hallo zusammen, ich stehe gerade total auf dem Schlauch. Ich habe folgende Klassen: Klasse A String attribut 1 = "abc"; String attribut 2 = "cde"; .... public A(){ ... } public String getAttribut1(){ this.attribut1 = attribut1; } public String getAttribut2(){ this.attribut2 = attribut2; } Klasse B String attribut 3 = "XXX"; String attribut 4 = "YYY"; .... public B(){ ... } public String getAttribut3(){ this.attribut1 = attribut1; } public String getAttribut4(){ this.attribut2 = attribut2; } Nun muss ich Klasse B in Klasse A casten. Ich dachte, ich kann das wie folgt: Zitat private A convert (B meinB){ A meineVariableA = new A(); a = (B) meinB; } Was mache ich falsch? HJST1979 reagierte darauf 1 Zitieren
Saheeda Geschrieben 24. April 2017 Geschrieben 24. April 2017 (bearbeitet) A und B sind zwei komplett verschiedene Klassen. Dass ihre Attribute (zwei Stück, beide Strings) gleich sind, heißt nicht, dass sie ineinander konvertierbar sind. Du kannst nur innerhalb einer Vererbungshierarchie fehlerfrei casten, ansonsten wird bereits der Compiler sagen, dass die Typen nicht kompatible sind. A muss also von B erben (oder anders herum). Darf ich ansonsten fragen, was du generell vor hast? Explizites Casten ist oft ein Hinweis auf Designfehler. Bearbeitet 24. April 2017 von Saheeda HJST1979 reagierte darauf 1 Zitieren
Whiz-zarD Geschrieben 24. April 2017 Geschrieben 24. April 2017 B ist nicht abgelitten von A, daher kann B nicht zu A gecastet werden. Schon mal das eh keinen Sinn machen würde, weil B dann schon die Eigenschaften von A besitzen würde. Darüber hinaus macht deine convert()-Methode überhaupt keinen Sinn und ist auch syntaktisch falsch. HJST1979 reagierte darauf 1 Zitieren
SebastianB. Geschrieben 24. April 2017 Geschrieben 24. April 2017 Hallo Alex, stell dir das mal lieber anhand eines praktischen Beispiels vor. Ich zeige dir mal eine Ableitungskette. Lebewesen -> Mensch -> Lehrer -> Englischlehrer -> Frau Müller Ding -> Fahrzeug -> Auto -> BMW -> 320D Du kannst nun ohne Probleme, Frau Müller als ein Lebewesen behandel, sowie du den 320d auch als Ding ansprechen kannst. Du erkennst sicher das Vererbungsmuster, das sich aufzeigt: Alles innerhalb einer Vererbungslinie kann von der obersten Klasse (insofern nicht bewusst über Sichtbarkeitsmodifizierer versteckt) benutzt werden. Dein Beispiel hat jetzt aber versucht, einen 320d mit Frau Müller anzusprechen. Da bringt dir auch eine selbstgeschriebene Convert-Funktion recht wenig, denn die beiden Objekte haben ja komplett unterschiedliche Bedeutungen. Manchmal macht es Sinn, zwei Objekte zu einander zu convertieren, da diese doch sehr ähnlich angelegt, aber nicht aus der gleichen Vererbungslinie stammen. Beispielsweise sind spezifisch implementierte Connections dafür ein gutes Beispiel. Ein direkter Cast ist dort nicht möglich, aber über ein Convert können die für Connections typischen Parameter wie IP, Name oder sonstiges einfach übernommen werden, ohne das Risiko oder die Mühe einer manuellen Copy eingehen zu müssen. Gruß Sebastian Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.