Frage zu Java-Vererbung (Cast)

TimoN11

Mitglied
Hey,
Wieso wird hier zweimal "Miau Miau" ausgegeben? Die erste Ausgabe sollte doch "Fauch" sein, da Hauskatze h in Katze gecastet wird.

[CODE lang="java" highlight="23"]public class Katze {
private String name ;
public Katze ( String name ) {
this. name = name ;
}
public String miezmiez () {
return " Fauch !";
}
}
public class Hauskatze extends Katze {
private String name ;
public Hauskatze ( String name ) {
super( name );
}
public String miezmiez () {
return " Miau Miau ";
}
}
public class Tierfreund {
public static void main ( String [] args ) {
Hauskatze h = new Hauskatze (" Schnurri ");
Katze k = new Katze (" Garfield ");
System . out . println ((( Katze )h). miezmiez ());

k = h;
System . out . println ((( Hauskatze )k). miezmiez ());
}
}[/CODE]
 

httpdigest

Top Contributor
Entscheidend ist nicht der statische Compilezeittyp des Ausdrucks, sondern der Laufzeittyp des Objektes, zu dem der Ausdruck auswertet.
Der statische Compilezeittyp des Ausdrucks (Katze)h ist zwar Katze, aber die Variable h enthält ja weiterhin eine Hauskatze als Instanz. Und nicht-statische Methodenaufrufe (wie eben für die Instanzmethode `miezmiez()`) werden immer bezogen auf den Laufzeittyp des Objektes dispatched.
Casts verändern also immer nur den statischen Typ bzw. Compilezeittyp eines Ausdrucks (um z.B. dem Compiler per Downcast zu sagen, dass du genau weisst, dass zur Laufzeit ein Objekt einen bestimmten Typ haben wird), aber niemals den Laufzeittyp eines Objektes.
 

TimoN11

Mitglied
Entscheidend ist nicht der statische Compilezeittyp des Ausdrucks, sondern der Laufzeittyp des Objektes, zu dem der Ausdruck auswertet.
Der statische Compilezeittyp des Ausdrucks (Katze)h ist zwar Katze, aber die Variable h enthält ja weiterhin eine Hauskatze als Instanz. Und nicht-statische Methodenaufrufe (wie eben für die Instanzmethode `miezmiez()`) werden immer bezogen auf den Laufzeittyp des Objektes dispatched.
Casts verändern also immer nur den statischen Typ bzw. Compilezeittyp eines Ausdrucks (um z.B. dem Compiler per Downcast zu sagen, dass du genau weisst, dass zur Laufzeit ein Objekt einen bestimmten Typ haben wird), aber niemals den Laufzeittyp eines Objektes.
Perfekt, danke dir.
Wird in Zeile 25 einfach nur die Referenz übergeben oder muss man da auf irgendwas achten. Mein Prof meinte das h der dynamische Typ von k ist. Aber eigentlich wird doch einfach nur die Referenz übergeben.

Grüße,
 

httpdigest

Top Contributor
k = h ist eine Zuweisung, die die aktuell in der Variablen h gespeicherte Objektreferenz an die Variable k zuweist. Beide Variablen enthalten danach also dieselbe Referenz auf dasselbe Objekt.
h ist nicht der dynamische Typ von k. Beides sind Variablen. Eine Variable hat keinen dynamischen Typ. Ein Objekt bzw. eine Instanz, die zu einem gegebenen Zeitpunkt in einer Variablen gespeichert ist, hat einen dynamischen Typ bzw. Laufzeittyp.
 

White_Fox

Top Contributor
Hey,
Wieso wird hier zweimal "Miau Miau" ausgegeben? Die erste Ausgabe sollte doch "Fauch" sein, da Hauskatze h in Katze gecastet wird.
Nehmen wir mal an, man würde dich zu einem Objekt vom Typ "Mensch" casten: Dann wärst du doch trotzdem immer noch derselbe TimoN11 und würdest genauso auf Anfragen reagieren wie sonst auch, oder?

Man könnte dich zwar nur so ansprechen wie jedes andere Objekt vom Typ Mensch, und würde Spezialmethoden, die nur du allein bereitstellst, nicht benutzen können. Aber du würdest doch genauso verhalten wie sonst auch.

Und bei Objekten und Klassen in Java verhält es sich genauso.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
L Frage zu IntStream (Java 8) Java Basics - Anfänger-Themen 6
M Allgemeine Java-Frage anhand bspw. Eclipse Java Basics - Anfänger-Themen 4
Henri Paare Frage über Java Programmierung Java Basics - Anfänger-Themen 10
L Frage zu 32 Bit IEEE Norm in Java Java Basics - Anfänger-Themen 5
T Frage zu Java Stack Java Basics - Anfänger-Themen 5
M Frage zu HashCode Methode in Java Java Basics - Anfänger-Themen 7
J Java 8 Streams - Frage zu "reduce" Java Basics - Anfänger-Themen 6
B Frage zu iCalendar in Java Eclipse Java Basics - Anfänger-Themen 0
M Frage Long Wert in Java Java Basics - Anfänger-Themen 1
K Frage zu Bitschifting in Java Java Basics - Anfänger-Themen 3
K Java Eclipse Schiffeversenken Frage Java Basics - Anfänger-Themen 3
M Frage bzgl. Oracle Java Zertifizierung Java Basics - Anfänger-Themen 4
S Java - Client/Server mit Stomp kurze Frage Java Basics - Anfänger-Themen 0
D McDonalds - Java Projekt frage Java Basics - Anfänger-Themen 7
X Kurze Frage zu Java Doc Java Basics - Anfänger-Themen 3
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
D Erste Schritte Problem mit dem Java-Editor Eclipse [Frage] Java Basics - Anfänger-Themen 13
DaniSahne96 Frage zu Java ist auch eine Insel Java Basics - Anfänger-Themen 12
A Java Flächeninhaltsberechnung kleine Frage Java Basics - Anfänger-Themen 8
J Java Basics Frage Compiler etc Java Basics - Anfänger-Themen 12
K Frage zu Datentypfeststellung in Java Java Basics - Anfänger-Themen 2
D Frage zu der import Anweisung in Java Java Basics - Anfänger-Themen 15
K Frage zu einer Connection in Java Java Basics - Anfänger-Themen 3
A Frage zu Eventprogrammierung in Java Java Basics - Anfänger-Themen 6
D Frage zu Klausur über Java Java Basics - Anfänger-Themen 2
K Frage zu Java Spielen Java Basics - Anfänger-Themen 2
G Frage zur Spezifikation von JAVA Java Basics - Anfänger-Themen 4
S Frage zu Fließkommadarstellung in Java Java Basics - Anfänger-Themen 4
J Allgemeine Frage zu GUI´s in Java Java Basics - Anfänger-Themen 6
F Java Timer Frage Java Basics - Anfänger-Themen 14
A Eine Frage zu AWt in JAVA, wie wähle ich ein Punkt aus`? Java Basics - Anfänger-Themen 4
S Java Anfänger - Tutorial Frage Java Basics - Anfänger-Themen 10
E Frage zu Java Dokumentation / Eclipse Java Basics - Anfänger-Themen 9
T Java Tree Frage Java Basics - Anfänger-Themen 2
L Frage zu Java-Programm Java Basics - Anfänger-Themen 6
B Frage zu Java Java Basics - Anfänger-Themen 14
X Java Algorithmus Frage Java Basics - Anfänger-Themen 17
T Frage aus dem Buch JAVA ist auch eine Insel Java Basics - Anfänger-Themen 11
G generelle Frage zu Strukturierung von Java-Programmen Java Basics - Anfänger-Themen 2
A Frage zu java und MySQL Java Basics - Anfänger-Themen 3
E Java Applet Seiten wechel frage Java Basics - Anfänger-Themen 15
G Frage zum Abspeichern von Java-Klassen Java Basics - Anfänger-Themen 9
L Frage zur Verschlüsselung in java Java Basics - Anfänger-Themen 3
I Liste in Java (Chat-Frage) Java Basics - Anfänger-Themen 3
G Frage zu kleinem Java Programm Java Basics - Anfänger-Themen 4
J Java Frage zur Methode Java Basics - Anfänger-Themen 14
B [Java] Schachbrett Frage Java Basics - Anfänger-Themen 11
C Frage zu java.lang.reflect.Proxy Java Basics - Anfänger-Themen 4
J Habe gerade erst mit Java begonnen - Frage zu JTabbedPane Java Basics - Anfänger-Themen 3
M Java Design Frage Java Basics - Anfänger-Themen 2
M Frage zu Java Compiler Java Basics - Anfänger-Themen 3
G Frage zur Generic java ? Java Basics - Anfänger-Themen 9
G Frage zu Java und Interfaces Java Basics - Anfänger-Themen 7
T Newbie Frage Eine Java Anwendung fernsteuern? Java Basics - Anfänger-Themen 4
G eine Frage zur Generic Java ? Java Basics - Anfänger-Themen 8
D dumme Frage! (was heist 'import java.util.*;' ?) Java Basics - Anfänger-Themen 3
C kleines Java script mit Frage Java Basics - Anfänger-Themen 2
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben