Polymorphie Cast:Verständnis und Ausführung

M

Mikka144

Gast
Hey,

es geht ums Casten von Objekten, genauer:
Ich habe ein BK-Objekt und ein AK-Objekt. Das BK-Objekt kann man zu einem AK-Objekt casten.
Meine Fragen:
1. Wozu das ganze? (nicht theoretisch, sondern praktisch).
2. Ich habe das ausprobiert, aber das Ergebnis erstaunt mich:
cAK:abgeleitete Klasse
cBK:Basisklasse
Java:
cAK ObjAK = new cAK();
cBK ObjBK = ObjAK;
cAK ObjAKMorph = (cAK)ObjBK;
Nun, was dort passiert, wenn ich das an einem Beispiel teste ist:
Ich habe das Objekt ObjAK mit all seinen Eigenschaften und am Schluss kommt das Objekt ObjAKMorph raus mit exakt denselben Eigenschaften. Naja das kann nicht der Sinn hinter dem Ganzen sein.
Sinnvoll wäre es, wenn ObjBK seine Eigenschaften behält, aber das scheitert ja an
Code:
ObjBK = ObjAK
.

Was mache ich falsch, bzw. worin besteht der Sinn hinter den Casts?
 

XHelp

Top Contributor
Galileo Computing :: Java ist auch eine Insel – 2.5 Ausdrücke, Operanden und Operatoren
Nur in deinem Fall sind das keine primitiven Datentypen.
1. Das brauchst du um aus Typ A Typ B zu machen. Wenn du z.B. eine List<SomeInterface> hast, dann kannst du die Einträge auf die ursprünglichen Klassen casten usw.
Java:
Ich habe das Objekt ObjAK mit all seinen Eigenschaften und am Schluss kommt das Objekt ObjAKMorph raus mit exakt denselben Eigenschaften. Naja das kann nicht der Sinn hinter dem Ganzen sein.
Sinnvoll wäre es, wenn ObjBK seine Eigenschaften behält, aber das scheitert ja an ObjBK = ObjAK
Diesen Teil verstehe ich allerdings nicht...

P.S. Convention, Convention, Convention...
Code:
SinnvolleKlassenBezeichnung
,
Code:
einMethodenName()
 
M

Mikka144

Gast
Das Prinzip vom Casten ist mir klar, für primitive Datentypen.
Wie definiert ist cAK abgeleitete Klasse und cBK Basisklasse.
Mein Problem ist folgendes:
Nehme ich mir einen Integer mit dem Wert 4 und caste ihn zu einem Double, dann ist es immer noch der Wert 4.
Jetzt stelle ich mir das so vor für Klassen:
Ich habe eine Basisklasse mit einem Attribut, Typ Integer, mit dem Wert 4.
Weiter habe ich eine Abgeleitete Klasse(AK), die natürlich die gleichen öffentlichen Attribute hat, allerdings auch noch weitere.
Wenn ich jetzt ein Objekt der Basisklasse caste, sollte nach meinem Verständnis "das richtige" Attribut der AK auch den Wert 4 haben.
Das ist in meinem Beispiel nicht der Fall.
 

XHelp

Top Contributor
Verstehe ich immer noch nicht... vllt hat es ja wer anders verstanden :bahnhof:
Aber beim Casten erstellst du ja kein neues Objekt, warum sollen sich die Werte plötzlich anders sein?
 
F

Firephoenix

Gast
vielleicht ein anderes Beispiel, das dir hilft.
angenommen du hast ein Interface IAllowAdd, das eine Methode add() erzeugt.
Dann hast du eine Klasse MyMath, die IAllowAdd implementiert und noch eine Methode sub() hinzufügt.

Jetzt hast du irgendeine Klasse, die dem Typ IAllowAdd arbeitet (z.b. als generischer Typ für Listen).
Du weißt an der Stelle aber, dass du nicht nur IAllowAdd benutzt hast, sondern genauer MyMath.

also Kannst du sowas machen:

((MyMath)List<IAllowAdd>.get(0)).sub(2,1)

(ungetestet - nur als Beispiel wofür man das verwenden könnte)

Gruß
 

Wildcard

Top Contributor
Ein cast bei Objekten ist primär für den Compiler relevant. Das Objekt selbst ändert sich nicht und es wird auch kein neues Objekt angelegt, aber der für den Compiler sichtbare Typ ändert sich.
Beispiel:
Java:
Object o = new String("string");
o.indexOf('s'); //kompilierfehler
String s = (String)o;
s.indexOf('s'); //funktioniert

Das einzige was zur Laufzeit passiert ist eine Überprüfung ob der Cast möglich ist, oder nicht. Wenn nein, fliegt eine ClassCastException
 
M

Mikka144

Gast
, warum sollen sich die Werte plötzlich anders sein?
Genau das hat mich gewundert - Ich habe jetzt meinen Fehler gesehen und es funktioniert, wie ich angenommen hatte, dass es funktionieren sollte.
Das Problem kam gleich von zwei Seiten daher, deshalb volle Verwirrung bei mir.
Jetzt macht es auch eher Sinn solche Casts zu benutzen - bzw. die Tatsache, dass ich die brauche.

Allerdings:

Aber beim Casten erstellst du ja kein neues Objekt
und
und es wird auch kein neues Objekt angelegt
Bei mir schon - Beispiel folgt hier:
Java:
public class cMain {
	public static void main (String[] args) {
		Frau f = new Frau(1,2);
		Mensch mf = f;
		mf.MenschEigenschaft = 3;
		Frau nf=(Frau)mf;
		System.out.println(nf.MenschEigenschaft);
		System.out.println(nf.FrauEigenschaft);
	}
}

class Mensch {
	public int MenschEigenschaft;
	public Mensch (int Eigenschaft) {
		this.MenschEigenschaft = Eigenschaft;
	}
}

class Frau extends Mensch {
	public int FrauEigenschaft;
	public Frau (int Eigenschaft, int FrauEigenschaft) {
		super(Eigenschaft);
		this.FrauEigenschaft = FrauEigenschaft;
	}
}
(Das Beispiel ist an ein Bsp. einer Vorlesung angelehnt.)
 

tagedieb

Top Contributor
Allerdings:
Aber beim Casten erstellst du ja kein neues Objekt

und
und es wird auch kein neues Objekt angelegt
Bei mir schon - Beispiel folgt hier:


Wo wird deiner Meinung nach ein neues Objekt angelegt?
Wenn du Eigenschaften eines Objektes aenderst wird noch kein neues Objekt angelegt und die Aenderung wirkt sich auf alle 3 Referenzen aus.

Wenn du den folgenden Code noch an deine Main Methode hinzufuegst wirst du sehen, dass alle 3 Referenzen identisch sind.


Java:
// alle 3 Referenzen haben dieselbe Speicheradresse
System.out.println(f);
System.out.println(mf);
System.out.println(nf);

// alle 3 Referenzen sind identisch
System.out.println(f == mf);
System.out.println(f == nf);

Um es noch zu mehr zu verdeutlichen solltest du auch die toString() Methode von Frau ueberschreiben:

Java:
	public String toString() {
		return super.toString() + " / " + MenschEigenschaft + " / " + FrauEigenschaft;
	}
 
M

Mika144

Gast
Au wei, ich dachte mit einem Aufruf ala
Code:
MeinObjektNr1 = MeinObjektNr2;
würde ich eine Kopier erstellen.
Offensichtlich ist das aber nicht der Fall.
Das ist ja dann quasi eine Pointeroperation, die ich dort vornehme.
Kann ich Objekte auch einfach kopieren?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
O Cast Java Basics - Anfänger-Themen 16
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
N Simpler cast? Java Basics - Anfänger-Themen 9
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
O Kleine Frage zu cast Java Basics - Anfänger-Themen 3
A Ohne Cast auf Methode zugreifen? Java Basics - Anfänger-Themen 4
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
K Cast bei equals Java Basics - Anfänger-Themen 2
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
N Cast eines Objektes in eine Hashmap Java Basics - Anfänger-Themen 13
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
R Variablen Möglich?: Cast einer Referenzvariable auf den Typ seines Objektes Java Basics - Anfänger-Themen 19
S Datentypen Reflection Cast anhand eines Strings? Java Basics - Anfänger-Themen 7
M ListIterator + Cast Java Basics - Anfänger-Themen 12
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
M Cast nach int Java Basics - Anfänger-Themen 8
M object cast auf double Java Basics - Anfänger-Themen 2
I double (cast) rundungsproblem Java Basics - Anfänger-Themen 8
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
L Type/Cast Problem Java Basics - Anfänger-Themen 6
E Klassen ClassCastException bei gleichnamigem: paket.klasse cannot be cast to paket.klasse Java Basics - Anfänger-Themen 10
T Datentypen byte -Division..mal gehts mit cast mal ohne Java Basics - Anfänger-Themen 5
M Collections Cast bei ArrayList (List) Java Basics - Anfänger-Themen 2
T Datentypen default ist int, cast zu byte nötig... Java Basics - Anfänger-Themen 2
C Generics und Cast Java Basics - Anfänger-Themen 5
E Datentypen type cast problem (int, byte,) Java Basics - Anfänger-Themen 5
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
J cast zu int immer 0.. Java Basics - Anfänger-Themen 6
I java.lang.String cannot be cast to OBJEKT Java Basics - Anfänger-Themen 8
A Object -> String mit valueOf, toString oder cast ? Java Basics - Anfänger-Themen 6
M Cast vermeiden Java Basics - Anfänger-Themen 11
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
B Exception cast to CORBA.Object Java Basics - Anfänger-Themen 2
K Cast-Operator Java Basics - Anfänger-Themen 3
Guybrush Threepwood Inhalt eines Strings für cast verwenden Java Basics - Anfänger-Themen 6
A Seltsame Class Cast Exception Java Basics - Anfänger-Themen 3
V Cast-Operator Java Basics - Anfänger-Themen 2
kulturfenster Cast Probleme Java Basics - Anfänger-Themen 2
V Frage zu final und Class bzw. Class.cast Java Basics - Anfänger-Themen 5
F paket.Klasse cannot be cast to paket.Klasse Java Basics - Anfänger-Themen 6
J Cast-Problem Java Basics - Anfänger-Themen 7
D Class Cast Exception Java Basics - Anfänger-Themen 5
R variabler cast Java Basics - Anfänger-Themen 5
G cast von Char nach int Java Basics - Anfänger-Themen 3
zilti Cast Exception bei JTable Java Basics - Anfänger-Themen 15
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
G cast von int To Integer? Java Basics - Anfänger-Themen 3
M Double -> Int Cast funktioniert nicht. Java Basics - Anfänger-Themen 5
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
B Cast explizit verbieten Java Basics - Anfänger-Themen 10
E Cast von Object zu int (Array) Java Basics - Anfänger-Themen 19
W Java Cast bei Vectoren Java Basics - Anfänger-Themen 10
A Cast Generics Java Basics - Anfänger-Themen 6
M Class Cast Exception Java Basics - Anfänger-Themen 7
J Cast zwischen zwei Unterklassen der selben Oberklasse. Java Basics - Anfänger-Themen 7
B Byte übergeben ohne cast? Java Basics - Anfänger-Themen 12
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
K nur für das verständnis Java Basics - Anfänger-Themen 3
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
J Code Verständnis Java Basics - Anfänger-Themen 9
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
Y MVC MouseEvent Verständnis Java Basics - Anfänger-Themen 24
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M If Verständnis Problem Java Basics - Anfänger-Themen 2
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
D Hilfe bei Verständnis von Aufgabe Java Basics - Anfänger-Themen 1
I Verständnis Frage wegen einer Aufgabe Java Basics - Anfänger-Themen 10
P verständnis Frage Refernzen und Objekte Java Basics - Anfänger-Themen 1
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J java syntax verständnis Java Basics - Anfänger-Themen 6
M Verständnis von Deadlocks Java Basics - Anfänger-Themen 2
C Klassen/Objekte Verständnis Java Basics - Anfänger-Themen 8
O Singleton Verständnis Java Basics - Anfänger-Themen 4
C Allgemeines Verständnis For-Schleife Java Basics - Anfänger-Themen 3
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
R Input/Output MVC - Frage zum Verständnis Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
X Kompilat verständnis Frage Java Basics - Anfänger-Themen 9
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
H Überladen Verständnis Java Basics - Anfänger-Themen 3
J Compiler-Fehler Verständnis Problem bei Compiler-Warning Java Basics - Anfänger-Themen 7
E Verständnis zu einem Rekursionsbeispiel Java Basics - Anfänger-Themen 12
F Verständnis Frage - && Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben