Polymorphismus und Vererbung

Status
Nicht offen für weitere Antworten.

Sinal

Neues Mitglied
Hallo,

bei den Vorbereitungen für die kommende Klausur bin ich auf folgendes Problem gestoßen.
Code:
public class Boot {
	public String typ;
	
	public Boot(){
		typ = "Boot";
	}

	public String getTyp(){
		return typ;
	}
	
}

class MotorBoot extends Boot{
	public String typ;
	
	public MotorBoot(){
		typ = "MotorBoot";
	}
	
	public String getTyp(){
		return typ;
	}
}


class Test{
	public static void main(String[] args) {
		MotorBoot motorb = new MotorBoot();
		
		System.out.println(motorb.typ);
		System.out.println(motorb.getTyp());
		
		Boot b;
		b = motorb;
		
		System.out.println(b.typ);
		System.out.println(b.getTyp());
	
	}
}

Ausgabe ist folgende:
MotorBoot
MotorBoot
Boot
MotorBoot

Weshalb wird bei dem Aufruf von b.getTyp() (Ausgabe Zeile 4) auf die Funktion der Klasse MotorBoot zugegriffen, obwohl wir vorher das Objekt einer Referenz vom Typ Boot zugewiesen haben.

Schöne Grüße
Sinal
 

Sky

Top Contributor
Weil es nun mal ein Motorboot ist. Das Objekt ist sich im Klaren darüber, was es ist! Gib mal folgendes aus:
Code:
System.out.println(b.getClass().getName());
, dann wirst Du es sehen.
Die Ausgabe von "Boot" in Zeile 3 hingegen ist falsch und hängt damit zusammen, dass deine Implementierung nicht stimmt, sie müsste eigentlich so aussehen:
Code:
class MotorBoot extends Boot{
   public MotorBoot(){
      typ = "MotorBoot";
   }
}
weil der Rest vererbt wird.
 

J-Walker

Mitglied
Sinal hat gesagt.:
Weshalb wird bei dem Aufruf von b.getTyp() (Ausgabe Zeile 4) auf die Funktion der Klasse MotorBoot zugegriffen, obwohl wir vorher das Objekt einer Referenz vom Typ Boot zugewiesen haben.

Nein, habt Ihr nicht.
Code:
MotorBoot motorb = new MotorBoot(); 
b = motorb;

Hier habt Ihr dem Boot die Referenz von Motorboot zugewiesen.
B ist zwar vom Typ Boot, jedoch mit einer Referenz auf Motorboot.

Gruss J-Walker
 

Sinal

Neues Mitglied
ok, dann ist also das Motorboot immernoch ein Motorboot, auch wenn es in b (vom Typ Boot) gespeichert wird. Soweit komme ich noch mit.
Warum ist dann aber die Ausgabe in Zeile 3 Boot, und nicht Motorboot.


Die Ausgabe von "Boot" in Zeile 3 hingegen ist falsch und hängt damit zusammen, dass deine Implementierung nicht stimmt
Die Implementierung ist absichtlich so gewählt, damit man eben auf diesen Sachverhalt (Zeile 3: Boot, Zeile 4: Motorboot) trifft (das man es in der Praxis anders machen würde sei mal dahingestellt).
 

Illuvatar

Top Contributor
Das Objekt hat sozusagen zwei Variablen "typ", eine stammt aus "Boot" eine aus "MotorBoot". In Zeile 3 wird auf das von Boot zugegriffen (Variablen überschreiben sich net oä desewgen keine Polymorphie oder sowas). In Zeile 4 wird die getter Methode aus MotorBoot aufgerufen, die wiederum auf die typ-Variable aus MotorBoot zugreift.
 

Chucky

Aktives Mitglied
Die ausgabe "Boot" in zeile 3 stimmt,
weil du das Basisklassenfeld typ in der Unterklasse nur verdeckst.
Du kannst aber weiterhin mit diesem Feld arbeiten.

LG Chucky
 
G

Gast

Gast
sollte diese Frage noch aktuell sein....
>Hier habt Ihr dem Boot die Referenz von Motorboot zugewiesen.
B ist zwar vom Typ Boot, jedoch mit einer Referenz auf Motorboot. >
diese Aussage ist schlichtweg falsch.
>Weshalb wird bei dem Aufruf von b.getTyp() (Ausgabe Zeile 4) auf die Funktion der Klasse MotorBoot zugegriffen, obwohl wir vorher das Objekt einer Referenz vom Typ Boot zugewiesen haben. >
diese Aussage stimmt.
Der ausschlaggebende Faktor ist, das Java call by Value nutzt und ich mit dieser Zuweisung nicht den Wert der Variablen verändere.
Die Methoden werden zur Compilierzeit statisch gebunden. Zur Laufzeit, also dynamisch spielt es eine Rolle, welches Objekt ich erzeuge.
b ist ein Boot (eine Variable vom Typ Boot), also wählt der Compiler zur Laufzeit auch die dafür statisch gebundene Methode aus, statische und dynamische Methodenbindung sind hierbei also gleich.
motorb ist zwar auch ein b, aber da ich ein Objekt vom Typ Motorboot erzeuge wählt der Compiler hierfür die überschriebene Methode der Klasse Motorboot aus, weil Motorboot nur eine Referenz auf Boot hat, aber nicht den Wert.

LG
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Polymorphismus Java Basics - Anfänger-Themen 4
N Frage zum dynamischen Polymorphismus Java Basics - Anfänger-Themen 1
H Polymorphismus-Überschreiben Java Basics - Anfänger-Themen 1
V Frage zu Polymorphismus: Objekt der Subklasse in Referenz der Oberklasse Java Basics - Anfänger-Themen 4
1 Frage bzgl. Polymorphismus Java Basics - Anfänger-Themen 6
D Polymorphismus Java Basics - Anfänger-Themen 5
S Polymorphismus Problem Java Basics - Anfänger-Themen 3
S Polymorphismus bei Arrays Java Basics - Anfänger-Themen 7
D Objektorientierung / Polymorphismus Java Basics - Anfänger-Themen 8
G Polymorphismus und die richtige Anwendung Java Basics - Anfänger-Themen 6
J abstract & Polymorphismus Java Basics - Anfänger-Themen 11
G Polymorphismus & Erweiterbarkeit Java Basics - Anfänger-Themen 3
G Polymorphismus und Null Java Basics - Anfänger-Themen 8
P Frage zum Polymorphismus Java Basics - Anfänger-Themen 3
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben