Heim > Java > javaLernprogramm > Der Unterschied zwischen Überladen und Umschreiben in Java

Der Unterschied zwischen Überladen und Umschreiben in Java

巴扎黑
Freigeben: 2017-06-23 16:37:34
Original
1354 Leute haben es durchsucht

Achtung Studierende, die Java lernen! ! !
Wenn Sie während des Lernprozesses auf Probleme stoßen oder Lernressourcen erhalten möchten, können Sie gerne der Java-Lernaustauschgruppe beitreten: 159610322 Lassen Sie uns gemeinsam Java lernen!

Lassen Sie uns zunächst über Folgendes sprechen: Überladung


(1) Methodenüberladung besteht darin, die Klasse zu vereinheitlichen. Ein Mittel zur Handhabung verschiedener Typen von Daten. Es existieren gleichzeitig mehrere Funktionen mit demselben Namen und unterschiedlicher Anzahl/Art von Parametern.

Überladung ist eine Manifestation von Polymorphismus in einer Klasse.


(2) Java-Methodenüberladung bedeutet, dass Sie mehrere Methoden in einer Klasse erstellen können. Sie haben den gleichen Namen, aber unterschiedliche Parameter und unterschiedliche Definitionen.

Beim Aufrufen von Methoden bestimmt die spezifische Anzahl und Art der an sie übergebenen Parameter, welche Methode verwendet werden soll. Dies ist Polymorphismus.


(3) Beim Überladen sollte der Methodenname gleich sein, aber der Parametertyp und die Parameternummer sind unterschiedlich, und der Rückgabewerttyp kann gleich oder unterschiedlich sein. Der Rückgabetyp kann nicht als Kriterium zur Unterscheidung überladener Funktionen verwendet werden.


Das Folgende ist ein Beispiel für eine Überladung:
package c04.answer; //Dies ist der Paketname
//Dies ist im Wesentlichen die erste Programmiermethode dieses Programms Methode Erstellen Sie zunächst eine Instanz der Dog-Klasse und verwenden Sie dann das Schlüsselwort this im Konstruktor der Dog-Klasse, um verschiedene Bark-Methoden aufzurufen.

Verschiedene überladene Methoden werden anhand ihrer Parametertypen unterschieden.

//Hinweis: Mit Ausnahme des Konstruktors verbietet der Compiler den Aufruf des Konstruktors an anderer Stelle.
package c04.answer;

public class Dog {
Dog()
void bark()// Die bark()-Methode ist eine überladene Methode.
void bark(String m,double l)//Hinweis: Die Rückgabewerte überladener Methoden sind gleich,
                                                                                                                                                                    bark (String m, double l) Bark (5, „China“);
}
Void Bar k (int a, String N) // kann die Gewichtslastmethode nicht vom Rückgabewert unterscheiden, sondern kann nur „Parametertyp“ und „Klassenname“ verwenden. Unterscheiden Sie zwischen > Hund dog = new Dog();
//dog .bark(); [Seite]
//dog.bark("männlich", "gelb");
//dog.bark(5, " China");




Dann sprechen wir über das Überschreiben


(1) Mehrere Unterschiede zwischen übergeordneten Klassen und Unterklassen Stateful, definieren Sie die Funktionen der übergeordneten Klasse neu. Wenn eine in einer Unterklasse definierte Methode denselben Namen und dieselben Parameter wie ihre übergeordnete Klasse hat, spricht man von einer überschreibenden Methode. In Java kann eine Unterklasse Methoden von einer übergeordneten Klasse erben, ohne dieselben Methoden neu zu schreiben.

Aber manchmal möchte die Unterklasse die Methoden der übergeordneten Klasse nicht unverändert erben, sondern bestimmte Änderungen vornehmen, was ein Umschreiben der Methode erfordert.


Das Überschreiben von Methoden wird auch als Methodenüberschreiben bezeichnet.


(2) Wenn eine Methode in der Unterklasse denselben Methodennamen, denselben Rückgabetyp und dieselbe Parameterliste wie eine Methode in der übergeordneten Klasse hat, überschreibt die neue Methode die ursprüngliche Methode.

Wenn Sie die Originalmethoden in der übergeordneten Klasse benötigen, können Sie das Schlüsselwort super verwenden, das sich auf die übergeordnete Klasse der aktuellen Klasse bezieht.


(3) Die Zugriffsänderungsrechte von Unterklassenfunktionen dürfen nicht geringer sein als die der übergeordneten Klasse.
Das Folgende ist ein Beispiel für das Umschreiben:


Konzept: der Mechanismus zum Aufrufen von Objektmethoden.

Die Insider-Geschichte der dynamischen Bindung:

1. Der Compiler überprüft den Typ und Methodennamen der Objektdeklaration, um alle Kandidatenmethoden zu erhalten. Versuchen Sie, den Test der Basisklasse im obigen Beispiel auszukommentieren. Andernfalls wird die Kompilierung nicht bestanden.

2. Überladungsentscheidung: Der Compiler prüft den Parametertyp des Methodenaufrufs und wählt die einzige der oben genannten Kandidatenmethoden aus (dabei findet eine implizite Typkonvertierung statt).

Wenn der Compiler mehr als eine findet oder keine gefunden wird, meldet der Compiler einen Fehler. Versuchen Sie, den Test (Byte b) der Basisklasse im obigen Beispiel auszukommentieren. Das laufende Ergebnis ist 1 1.

3. Wenn der Methodentyp „Priavte static final“ ist und Java die statische Kompilierung verwendet, weiß der Compiler genau, welche
-Methode aufgerufen werden muss.

4. Wenn das Programm ausgeführt wird und dynamische Bindung zum Aufrufen einer Methode verwendet, muss die virtuelle Maschine die Methodenversion aufrufen, die dem tatsächlichen Typ des Objekts entspricht.

Im Beispiel ist der tatsächliche Typ, auf den b zeigt, TestOverriding, daher ruft b.test(0) den Test der Unterklasse auf.

Die Unterklasse überschreibt jedoch nicht test(byte b), daher ruft b.test((byte)0) den test(byte b) der übergeordneten Klasse auf.

Wenn das (Byte b) der übergeordneten Klasse auskommentiert ist, wird der implizite Typ im zweiten Schritt in int konvertiert und schließlich wird der Test (int i) der Unterklasse aufgerufen.

Lernzusammenfassung:

Polymorphismus ist ein Merkmal der objektorientierten Programmierung und hat nichts mit Methoden zu tun.
Einfach ausgedrückt bedeutet es, dass es sich um dieselbe Methode handelt kann basierend auf unterschiedlichen Eingabedaten verwendet werden, die eine unterschiedliche Verarbeitung erfordern, d Die Daten sind die gleichen, aber wenn Sie eine Antwort geben möchten, die sich von der der übergeordneten Klasse unterscheidet, müssen Sie die Methode der übergeordneten Klasse überschreiben.

Das heißt, die Methode in der Unterklasse neu schreiben – gleiche Parameter, unterschiedlich Implementierungen (dynamischer multipler Morphismus)

Die drei Hauptmerkmale von OOP: Vererbung, Polymorphismus und Kapselung.

public class Base

{

void test(int i)

{
System.out.print(i);
}
void test(byte b } {
i++;
System.out.println(i);
}
public static void main(String[]agrs)
Base b =new TestOverriding();
b.test(0)
Das Ergebnis der dynamischen Bindung.



Der Hauptvorteil des Überschreibens ist die Möglichkeit, Merkmale zu definieren, die für eine Unterklasse einzigartig sind:

public class Father{

public void speak(){

System.out.println(Father);

}

}

public class Son erweitert Father{

public void speak ( ){

System.out.println("son");

}

}

Dies wird auch Polymorphismus und die überschreibende Methode genannt Nur können in einer Vererbungsbeziehung existieren. Überschreibende Methoden können nur nicht private Methoden der übergeordneten Klasse überschreiben.

Wenn die Speak()-Methode der Vaterklasse im obigen Beispiel privat ist, kann die Son-Klasse die Speak()-Methode der Vaterklasse nicht überschreiben. Zu diesem Zeitpunkt ist die Speak()-Methode der Son-Klasse äquivalent definiert in der Son-Klasse speak() Methode.

Sobald die speak()-Methode der Vaterklasse endgültig ist, kann die Son-Klasse die speak()-Methode der Vaterklasse überhaupt nicht überschreiben, unabhängig davon, ob die Methode öffentlich, geschützt oder standardmäßig geändert wird.

versucht es Um den Code zu kompilieren, meldet der Compiler einen Fehler. Beispiel:

public class Father{

final public void speak(){

System.out.println("Father");

}

}

public class Son erweitert Father{

public void speak(){

System.out.println("son");

}

} //Der Compiler meldet einen Fehler

Wenn die speak()-Methode der Vaterklasse standardmäßig geändert wird, kann sie nur in sein sich im selben Paket befinden und von anderen Unterklassen geändert werden, werden überschrieben und können nicht überschrieben werden, wenn sie sich nicht im selben Paket befinden.

Wenn die speak()-Methode der Father-Klasse protoetiert wird, wird sie nicht nur von ihren Unterklassen im selben Paket überschrieben, sondern kann auch von Unterklassen verschiedener Pakete überschrieben werden.

Regeln für das Überschreiben von Methoden:

1. Die Parameterliste muss genau mit der überschriebenen Methode übereinstimmen, sonst kann es nicht als Überschreiben, sondern als Überladen bezeichnet werden.

2. Der Rückgabetyp muss immer mit dem Rückgabetyp der überschriebenen Methode identisch sein, sonst kann es nicht als Überschreiben, sondern als Überladen bezeichnet werden.

3. Der Zugriffsmodifikator-Grenzwert muss größer sein als der Zugriffsmodifikator der überschriebenen Methode (public>protected>default>private)

4. Die überschriebene Methode darf keine neuen Checked-Ausnahmen auslösen geprüfte Ausnahmen, die umfassender sind als die überschriebene Methodendeklaration. Beispiel:

Eine Methode der übergeordneten Klasse deklariert eine geprüfte Ausnahme IOException. Beim Überschreiben dieser Methode können Sie keine Ausnahmen auslösen. Sie können nur Ausnahmen von Unterklassen von IOException auslösen.

Die Regeln für die Überladung:

1. Muss unterschiedliche Parameterlisten haben.

Kann nicht beschuldigende Rückgabetypen haben Die Parameterliste ist unterschiedlich;

Kann unterschiedliche Zugriffsmodifikatoren haben;

Der Unterschied zwischen Umschreiben und Überladen ist:

Das Umschreiben von Polymorphismus kann die Menge an Codeeingaben beim Aufrufen überladener Methoden erheblich reduzieren. Sie können unterschiedliche Funktionen oder Rückgabewerte haben.

Eine gute Verwendung von Umschreiben und Überladen kann eine Klasse mit einer klaren und prägnanten Struktur entwerfen. Man kann sagen, dass Umschreiben und Überladen eine außerordentliche Rolle beim Schreiben von Code spielen.

Achtung, Studierende, die Java lernen! ! !

Wenn Sie während des Lernprozesses auf Probleme stoßen oder Lernressourcen erhalten möchten, können Sie gerne der Java-Lernaustauschgruppe beitreten: 159610322 Lassen Sie uns gemeinsam Java lernen!

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Überladen und Umschreiben in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage