Wenn ich den folgenden Code in Java habe:
%Vor% In diesem speziellen Fall überschreibt die Unterklasse die add
-Funktion der Basisklasse nicht genau, da sie unterschiedliche Signaturen haben und das Konzept der Überladung nur dann auftritt, wenn sie im selben Bereich liegen. Wird also die Funktion add(float , float)
in der Unterklasse B
als eine völlig neue Funktion behandelt und das Konzept des Überladens und Überschreibens ist nicht anwendbar? Und verwendet es "Statische Bindung" oder "Dynamische Bindung"?
Kurz gesagt, ja. Um überschreiben zu können, müssen Sie die vollständige Methodensignatur replizieren, die den Methodennamen, Parameter und Rückgabetypen enthält. Von dem Lernprogramm
Eine Instanzmethode in einer Unterklasse mit der gleichen Signatur (name, plus die Anzahl und den Typ seiner Parameter) und Rückgabetyp als ein Instanzmethode in der Oberklasse überschreibt die Methode der Oberklasse.
Vielleicht möchten Sie die @Override-Annotation berücksichtigen , die einen Compilerfehler auslöst, wenn Sie eine Methode nicht erfolgreich überschreiben.
In diesem speziellen Fall sieht es vielleicht so aus, als müssten Sie nicht so sehr übersteuern wie einige Lösungen, einschließlich Generika. Sie können also eine Klasse a<Integer>
und eine ähnliche Klasse a<Float>
In diesem Fall überschreiben Sie die Methode nicht , da die Signaturen unterschiedlich sind.
Aber es gibt überladen in Klasse b, da Sie zwei Methoden mit dem gleichen Namen, aber verschiedenen Parametern (eine wenn Klasse a und die andere in Klasse b)
habenIch hoffe, es hilft.
Es kann eine Methode geben, die in der Unterklasse nicht überschrieben, sondern überladen wird. Hier hat die Unterklasse zwei add () - Methoden. Die Version, die int-Argumente akzeptiert (nicht überschrieben) und die überladene Methode add (), die float-Argumente akzeptiert.
Ich denke, in diesem speziellen Fall treten weder Überladung noch Übersteuerung auf, da der Rückgabetyp im Falle eines Überladens und Übersteuerns gleich sein muss, so dass in diesem Fall weder eine statische Bindung noch eine dynamische Bindung stattfindet. Das Überladen von Methoden ist bei einem anderen Rückgabetyp nicht möglich, da der Compiler nicht herausfinden kann, welche Methode er aufrufen muss.
Die Methode add()
in Klasse A steht der Klasse B auch durch Vererbung zur Verfügung, daher ist die Methode overloaded
in der Klasse, indem der Datentyp von int, int
nach float, float
geändert wird.
Das Konzept des Überladens kommt genau dann zum Tragen, wenn sich die Funktionen im selben Umfang oder derselben Klasse befinden. cz Wenn dies der Fall ist, wenn die Methode überladen wird, dann wird der Compiler für die gleiche Methodensignatur oder den gleichen Argumenttyp verwirrt und muss einen Kompilierzeitfehler geben. aber in dem obigen Programm in Klasse B, wenn Sie das gleiche Argument in der gleichen Reihenfolge übergeben, dann nach Überlastung muss es Fehler geben, aber es ist nicht passiert, Sie können es überprüfen, ich habe bereits. Es ist der Fall der Vererbung, wo durch Objektreferenz, wenn Sie irgendeine Methode aufrufen, dann wird der Compiler es in der Kindklasse überprüfen, wenn es nicht dort ist, dann wird es in die Elternklasse schauen, von der das obige Programm handelt. hoffe das ist hilfreich.
Tags und Links java oop overloading