Ist das Überladen, Methoden mit gleichem Namen in verschiedenen Klassen und unterschiedlicher Signatur?

8

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"?

    
Genocide_Hoax 08.03.2013, 10:07
quelle

7 Antworten

4

Methode add in Klasse b ist eine Überladung von add in Klasse a. Keine Überschreibung . Eine Überschreibung wäre nur eine andere Implementierung der ursprünglichen Add-Methode.

    
Breavyn 08.03.2013 10:09
quelle
2

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>

instanziieren     
Brian Agnew 08.03.2013 10:08
quelle
2

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)

haben

Ich hoffe, es hilft.

    
Cacho Santa 08.03.2013 10:10
quelle
1

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.

    
Prateek Sharma 31.03.2014 05:48
quelle
0

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.

    
Rahul Vyas 03.02.2016 05:46
quelle
-1

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.

    
quelle
-1

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.

    
Rahul 13.07.2016 18:06
quelle

Tags und Links