Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben (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 von Saheeda
Geschrieben

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.

Geschrieben

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 :)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...