Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben?

Zidinjo

Mitglied
Hallo meine Freunde,

ich habe kurz eine Frage bezüglich Java.

Ich habe eine Klasse Person, Student und Ai_Student.

Student erbt von Person und Ai_Stundent von Student.

jetzt schreibe ich in Java:
Java:
Person peter = new Student();
Person Marvin = new Ai_Student();
Person Schnick = new Person();

Was bringen mir die verschiedenen Instanzen?
 
Erstmal haben die drei denselben statischen Typ "Person", damit könntest du z.B. alle in einer Liste speichern oder alle Methoden, die durch Person bereit gestellt werden aufrufen.

Sie haben aber auch verschiedene dynamische Typen und können sich damit zur Laufzeit verschieden verhalten. Definierst du z.B. eine Methode "machWas()" in Person, überschreibst diese aber in Student und Ai_Student, so wird derselbe Methodenaufruf in allen dreien zu verschiedenen Ergebnissen führen.

https://bruck.me/2014/01/08/java-statischer-vs-dynamischer-typ/
 
Geht es dir jetzt um die Typen von Variablen oder darum, was du mit Objekten anstellen kannst?

Beispiel: Du hast auchnoch eine Klasse "Höhenmesser", welche überprüft, ob jemand groß genug für eine Achterbahn ist und eine Klasse "Dozent", welche an der Universität Vorlesungen "verteilt".
Der Höhenmesser arbeitet mit Menschen/Personen. Für seine Funktionaliät ist es 100% egal, ob diese Person jetzt studiert oder ob sie in Rente ist.
Der Dozent Unterrichtet ggf. ein Fach, welches in mehreren Studiengängen relevant ist, z.B. Mathemathik. Er kann daher nur mit Studenten arbeiten; es ist aber auch ihm egal, welchen Studiengang die Studenten genau absolvieren.

Die Instanzen von Person, Student und Ai_Student sind in deinem Programm das Äquivalent zu Menschen. Alle 3, sowohl Peter, Marvin als auch Schnick können sich für die Achterbahn anstellen (aber Marvin ist vielleicht zu klein dafür). Die Vorlesung kann Schnick aber nicht besuchen, er ist kein Student.

P.S.: Das war jetzt die Spitze vom Eisberg. Das Thema nennt sich Polymorphie und ist relativ umfangreich.
 
Zuletzt bearbeitet:
Puh, gar nicht so einfach. Wenn ich z.b Felder wie alter und Name bei Person in der Klasse habe und dann eine Instanz mit dem Datentyp Person = new Student(); mache, dann hat diese Instanz alle Methoden & Felder von dem Datentyp Person. Aber der Datentyp Person hat keine einzigen Methoden oder Felder von der Klasse Student, da ich ja nur eine Instanz davon habe. Abver wenn ich jetzt z.b Student fred = new Student() mache und Student von der Klasse Person geerbt hat, kann ich auf alle Methoden & Felder der Klasse Person und Student zugreifen oder ?
 
Richtig, so ist es. Deine Formulierung ist aber noch nicht ganz richtig:
Mit Person MisterX = new Student() hast du eine Variable vom Typ Person und eine Instanz von Student. Der Typ der Variable verursacht die Limitierung.
 
Mit Limitierung habe ich gemeint, dass du im Fall Person MisterX = new Student() nicht auf alle Methoden des Objekts zugreiffen kannst, weil die Variable vom Datentyp Person ist.
 

Zurück
Oben