Java Referenz & Instanz

Pilly

Lt. Commander
Registriert
Juli 2004
Beiträge
1.268
Ich bin gerade dabei den Unterschied zwischen Referenzen und Instanzen herauszuarbeiten.

Also eine Referenz ist doch einfach nur ein Zeiger oder?
Wenn ich sage
Code:
Person Dietrich
ist das meine Referenzvariable oder wie ist das?

Und weiter kann ich ja dann eine neue Instanz anlegen
Code:
Dietrich = new Person()
Damit habe ich dann eine neue Instanz der Klasse Person angelegt oder?

Ich hoffe, dass da erstmal etwas wahres dran ist - denke aber, dass die beiden Begriffe sicherlich noch sauberer voneinander zu trennen und zu erklären sind. Es wäre wirklich nett, wenn mir da jmd. nochmal kurz etwas zu schreiben könnte :)
 
eine referenz ist ein zeiger auf ein objekt (=Instanz?), dh du arbeitest nicht mit dem Objekt Dietrich, sondern mit dem Objekt, auf das der Zeiger Dietrich verweist.
D.h. wenn du Dietrich kopierst, kopierst du nicht das Objekt sondern den Zeiger, hast dann also 2 Referenzen, die auf die selbe Instanz verweisen...

hoffe ich habe alles richtig zusammenbekommen, falls nicht, bitte ignorieren =)
 
OK also ist Dietrich eine Referenz, die auf die Instanz Person verweist!?
 
Dietrich ist eine Referenz des Typs Person, das auf ein Objekt (Instanz) der Klasse Person verweist.
 
Danke :)
weiteres Beispiel
Code:
Auto porsche = new Auto();

Dann ist porsche also eine Referenz von der Art Auto und verweist auf eine Instanz (also einem Objekt) der Klasse Auto!?

Achja eine kleine Syntax/Programmierlogikfrage:
Code:
Sportwagen porsche = new Auto();
ist nicht erlaubt oder? Weil der Typ Sportwagen für die Referenz porsche ja nicht definiert ist!?
 
Pilly schrieb:
Dann ist porsche also eine Referenz von der Art Auto und verweist auf eine Instanz (also einem Objekt) der Klasse Auto!?
Ja.

Code:
Sportwagen porsche = new Auto();
Richtig, geht nicht aus den von dir genannten Gründen.

Falls allerdings gilt:
Code:
Sportwagen extends Auto
dürftest du schreiben:
Code:
Auto porsche = new Sportwagen();
 
das wäre dann Vererbung, richtig?
Vielen Dank dann erstmal und einen guten Rutsch euch allen ;)
 
Ja, Sportwagen würde von Auto erben. Anders gesagt: Sportwagen ist eine Spezialisierung von Auto.
In meinem Beispiel wäre "porsche" dann eine Referenz vom Typ Auto, welche auf eine Instanz der Klasse Sportwagen zeigt. Das funktioniert, weil Auto eine Teilmenge von Sportwagen ist.
 
schön kannst du dir das auch bei call by value und call by reference deutlich machen.

Call by Value:
Funktion erhält eigene Instanz eines Objektes. Wenn es diese verändert und man außerhalb der Funktion wieder auf das Objekt zugreift welches übergeben wurde, so ist es unverändert geblieben, sofern keine explizite Zuweisung stattfand. (z.B. durch obj = func(obj) wobei func das veränderte obj returned)

Call by Reference:
Funktion erhält einen Zeiger auf das Objekt, mit dem es aufgerufen wurde. Dadurch wirken sich Änderungen direkt aus.
 
Zurück
Oben