• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Frage zu Java-Vererbung (Cast)

TimoN11

TimoN11

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

Java:
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 ());
    }
}
 
H

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

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,
 
H

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.
 
W

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
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
F 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
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
C Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben