Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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?

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.