Up-/Downcasting und instanceof
Verstehen Sie das Upcasting auf einen Oberklassen-Typ, sicheres Downcasting mit instanceof und typische Fallstricke, die ClassCastException verursachen.
Up-/Downcasting und instanceof ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 3 Lektionen.
Upcasting und Downcasting
Upcasting speichert ein Objekt einer Unterklasse in einer Referenz des Oberklassentyps und ist immer sicher. Downcasting geht in die andere Richtung und erfordert Vorsicht. Mit instanceof prüfen wir den tatsächlichen Typ zur Laufzeit.
Code: Demo zum Upcasting
Upcasting erfolgt implizit und ist sicher: Ein Dog kann als Animal behandelt werden. Sie können die in Animal deklarierten Methoden aufrufen; zur Laufzeit wird die Version von Dog ausgeführt.
public class Main {
static class Animal {
void speak() { System.out.println("Animal sound"); }
}
static class Dog extends Animal {
void speak() { System.out.println("Woof"); }
void fetch() { System.out.println("Fetch!"); }
}
public static void main(String[] args) {
// Upcasting: Dog stored in an Animal reference (safe, automatic)
Animal a = new Dog();
a.speak(); // calls Dog's speak() due to dynamic binding
// a.fetch(); // Not allowed: reference is Animal, which does not declare fetch
System.out.println("Upcasting hides Dog-only methods from the reference type.");
}
}
Warum Downcasting?
Sie führen ein Downcasting durch, wenn Sie eine Methode benötigen, die nur die Unterklasse besitzt, etwa fetch(). Das sollte selten und gut geprüft geschehen. Schreiben Sie den Code möglichst gegen die Oberklasse oder ein Interface.
Code: Sicheres Downcasting
Verwenden Sie vor dem Casting instanceof. Wenn die Prüfung fehlschlägt, überspringen Sie das Casting und wählen Sie einen anderen Pfad. So vermeiden Sie ClassCastException.
public class Main {
static class Animal { void speak() { System.out.println("Animal sound"); } }
static class Dog extends Animal { void speak() { System.out.println("Woof"); } void fetch() { System.out.println("Fetch!"); } }
static class Cat extends Animal { void speak() { System.out.println("Meow"); } }
public static void main(String[] args) {
Animal a1 = new Dog();
Animal a2 = new Cat();
// Safe downcast using instanceof
if (a1 instanceof Dog) {
Dog d = (Dog) a1;
d.fetch(); // OK
}
if (a2 instanceof Dog) {
Dog d2 = (Dog) a2; // will not run
d2.fetch();
} else {
System.out.println("a2 is not a Dog, skip casting.");
}
}
}
Häufige Fehler
Fehlerquelle: Casting ohne Prüfung kann ClassCastException auslösen. Ein weiterer Fehler ist, Downcasting zu häufig einzusetzen, statt gegen Interfaces zu programmieren. Halten Sie Casts nahe an der Stelle, an der Sie sie benötigen, und bevorzugen Sie Polymorphie.
Code: Unsicheres und sicheres Casting
Führen Sie niemals blind ein Casting durch. Wenn Sie sich beim Laufzeittyp nicht sicher sind, sichern Sie das Casting mit instanceof ab und wählen Sie eine sichere Alternative, falls der Typ nicht passt.
public class Main {
static class Animal { void speak() { System.out.println("Animal"); } }
static class Dog extends Animal { void fetch() { System.out.println("Fetch!"); } }
static class Cat extends Animal { }
public static void main(String[] args) {
Animal a = new Cat();
// Bad: direct cast (would throw at runtime)
// Dog dBad = (Dog) a; // ClassCastException if uncommented
// Good: check first
if (a instanceof Dog) {
Dog d = (Dog) a;
d.fetch();
} else {
System.out.println("Not a Dog; skipping cast.");
}
}
}
Downcasting überprüfen
Kurze Überprüfung: Wie führen Sie ein sicheres Downcasting einer Animal-Referenz zu Dog durch?
Zusammenfassung
Zusammenfassung: Upcasting ist sicher und üblich. Für Downcasting benötigen Sie instanceof, um Abstürze zu vermeiden. Programmieren Sie bevorzugt gegen Oberklassentypen oder Interfaces, damit Sie weniger Casts benötigen.
Häufig gestellte Fragen
Ist die Lektion „Up-/Downcasting und instanceof“ kostenlos?
Ja — der vollständige Text von „Up-/Downcasting und instanceof“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „Up-/Downcasting und instanceof“?
Verstehen Sie das Upcasting auf einen Oberklassen-Typ, sicheres Downcasting mit instanceof und typische Fallstricke, die ClassCastException verursachen. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 3.
Wie lange dauert die Lektion „Up-/Downcasting und instanceof“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Abstrakte Klassen
- Schnittstellen (Einführung und Vergleiche)
- Up-/Downcasting und instanceof