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
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
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
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden