English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In dieser Anleitung werden wir anhand von Beispielen die Methode-Überschreibung in Java lernen.
In der vorherigen Anleitung haben wir die Vererbung gelernt. Vererbung ist eine Eigenschaft der OOP, die es uns ermöglicht, eine neue Klasse (Unterklasse) aus einer bestehenden Klasse (Oberklasse) abzuleiten, und die Unterklasse vererbt die Eigenschaften und Methoden der Oberklasse.
Wenn in der Oberklasse und der Unterklasse dieselbe Methode definiert ist, überschreibt die Methode der Unterklasse die Methode der Oberklasse. Dies wird als Methode-Überschreibung (Methode-Überschreiben) bezeichnet.
class Animal { public void displayInfo() { System.out.println("Ich bin ein Tier."); } } class Dog extends Animal { @Override public void displayInfo() { System.out.println("Ich bin ein Hund."); } } class Main {}} public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Ausgabe:
Ich bin ein Hund.
In diesem Programm existiert die Methode displayInfo() gleichzeitig in der Oberklasse Animal und der Unterklasse Dog.
Wenn wir d1Wenn ein Objekt (ein Objekt der Unterklasse) displayInfo() aufruft, wird die Methode der Unterklasse Dog aufgerufen. Die Methode displayInfo() der Unterklasse überschreibt die gleiche Methode der Oberklasse.
Bitte beachten Sie, dass wir im Beispiel den @Override-Kommentar verwendet haben. In Java sind Kommentare Meta-Daten, die wir verwenden, um dem Compiler Informationen bereitzustellen. Hier sagt der @Override-Kommentar dem Compiler, dass die Methode nach diesem Kommentar die Methode der Oberklasse überschreibt.
Die Verwendung von @Override ist nicht obligatorisch. Aber wenn wir diese Methode verwenden, sollte sie alle Regeln der Überschreibung befolgen. Andernfalls generiert der Compiler einen Fehler.
Elternklasse und Unterklasse müssen die gleiche Methodenname, den gleichen Rückgabetyp und die gleiche Parameterliste haben.
Wir können Methoden, die als final und static deklariert wurden, nicht überschreiben.
Wir sollten immer die abstrakten Methoden der Oberklasse überschreiben (dies wird in zukünftigen Tutorials besprochen).
Ein häufiges Problem, das bei der Ausführung von Überschreibungen in Java auftritt, ist:
Können wir nach der Überschreibung auf Methoden der Oberklasse zugreifen?
Die Antwort istBestätigend。Um Methoden der Oberklasse aus der Unterklasse zu erreichen, verwenden wir das Schlüsselwort super.
class Animal { public void displayInfo() { System.out.println("Ich bin ein Tier."); } } class Dog extends Animal { public void displayInfo() { super.displayInfo(); System.out.println("Ich bin ein Hund."); } } class Main {}} public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Ausgabe:
Ich bin ein Tier. Ich bin ein Hund.
Im obigen Beispiel hat die Unterklasse Dog die Methode displayInfo() der Oberklasse Animal überschrieben.
Wenn wir den d der Unterklasse Dog verwenden1Wenn ein Objekt die Methode displayInfo() aufruft, wird die Methode innerhalb der Unterklasse Dog aufgerufen. Es wird nicht die Methode innerhalb der Elternklasse aufgerufen.
Innerhalb der Methode displayInfo() der Unterklasse Dog verwenden wir super.displayInfo(), um die Methode displayInfo() der Elternklasse aufzurufen.
Es ist zu beachten, dass Konstruktoren in Java nicht vererbt werden. Daher gibt es in Java kein Problem wie die Überschreibung von Konstruktoren.
Aber wir können den Konstruktor der Oberklasse aus der Unterklasse aufrufen. Dafür verwenden wir super(). Für weitere Informationen besuchen Sie bitteJava Super-Schlüsselwort。
In der gleichen Methode, die in der Elternklasse und der Unterklasse deklariert wird, können unterschiedliche Zugriffsmodifikatoren haben. Es gibt jedoch eine Einschränkung.
Wir können nur solche Zugriffsmodifikatoren verwenden, die im Unterklassenobjekt eine größere Zugriffsrechte als im Elternklasseobjekt bieten. Zum Beispiel,
Angenommen, die Methode myClass() im Elternklasse wurde als protected deklariert. Dann kann die gleiche Methode in der Unterklasse als public oder protected, aber nicht als private, deklariert werden.
class Animal { protected void displayInfo() { System.out.println("Ich bin ein Tier."); } } class Dog extends Animal { public void displayInfo() { System.out.println("Ich bin ein Hund."); } } class Main {}} public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Ausgabe:
Ich bin ein Hund.
Im obigen Beispiel überschreibt die Unterklasse Dog die displayInfo()-Methode der Elternklasse Animal.
Jederzeit, wenn wir verwenden1Bei dem Aufruf von displayInfo() durch ein Unterklassenobjekt wird die interne Methode der Unterklasse aufgerufen.
Beachten Sie, dass displayInfo() in der Elternklasse Animal als geschützt (protected) deklariert ist. Dieser Methodenbeschränkung hat im Dog-Unterklassenobjekt einen öffentlichen Zugriffsmodifikator (public). Dies ist erlaubt, da public einen größeren Zugriffsrechte als protected bietet.
In Java werden abstrakte Klassen als Elternklasse (Basisklasse) anderer Klassen erstellt. Und wenn eine Klasse abstrakte Methoden enthält, muss sie überschrieben werden.
In den folgenden Tutorials werden wir mehr über die Überschreibung von abstrakten Klassen und Methoden lernen.