Ist diese Überladen, Methoden mit gleichen Namen in verschiedenen Klassen und unterschiedlichen Signatur?
Wenn ich den folgenden code in Java:
class A {
public int add(int a , int b) {
return (a+b);
}
}
class B extends A {
public float add(float a , float b) {
return (a+b);
}
In diesem besonderen Fall die sub-Klasse ist nicht gerade das überschreiben der Basis-Klasse add
Funktion, wie Sie verschiedene Signaturen und das Konzept der überlastung tritt nur auf, wenn Sie in dem gleichen Umfang. Also, ist die Funktion add(float , float)
in der sub-Klasse B
behandelt, als eine völlig neue Funktion und das Konzept zu überladen und das überschreiben ist nicht anwendbar, es? Und ist es verwenden, "Statische Bindung" oder "Dynamische Bindung'?
- Nur ein Tipp: Klassennamen in Java sollten beginnen mit einem Großbuchstaben.
- Ich glaube nicht, es ist obligatorisch..
- Es ist nicht zwingend, aber es hilft bei der Lesbarkeit usw.
- Deshalb schrieb ich 'sollte'.
- Ja , Stimmt. Vielen Dank für den Edit.
- Sehr ilustrative: programcreek.com/2009/02/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Methode add in der Klasse b ist ein überlastung von add in der Klasse ein. Nicht ein überschreiben. Ein überschreiben wäre nur eine andere Implementierung der originalen add-Methode.
In kurzen, ja. Zu überschreiben, müssen Sie replizieren die komplette Signatur der Methode, die beinhaltet den Namen der Methode, Parameter-und Rückgabetypen. Von das tutorial
Möchten Sie vielleicht zu prüfen, die @Override-annotation, das löst einen compiler-Fehler, wenn Sie nicht erfolgreich overrride eine Methode.
In diesem besonderen Fall, ist es vielleicht so aussieht, wie Sie nicht benötigen, überschreiben so viel wie einige Lösung einschließlich Generika. So könnte man instanziieren einer Klasse
a<Integer>
und eine ähnliche Klassea<Float>
In diesem Falle sind Sie nicht überschreiben der Methode, da die Signaturen unterschiedlich sind.
Aber es ist überlastung in Klasse b, da haben Sie zwei Methoden mit dem gleichen Namen, aber unterschiedlichen Parametern (wenn Klasse a eine andere Klasse b)
Hoffe, es hilft.
Kann es sein, eine Methode, die nicht überschrieben, sondern überladen, die in der Unterklasse. Hier die Unterklasse hat zwei add () - Methoden. Die version, die akzeptiert int-Argumente(nicht überschrieben), und die überladene Methode add() akzeptiert float-Argumente.
Ich denke, in diesem speziellen Fall weder überladen noch überschreiben tritt auf, weil der return-Typ muss gleich sein im Fall von überladen und überschreiben, so dass weder statische Bindung noch dynamische Bindung geschieht in diesem Fall.
die Methode überladen ist nicht möglich im Fall der anderen zurück geben, weil der compiler kann nicht herausfinden, dass die Methode, die er aufrufen müssen.
Ich weiß, es ist spät Antwort, aber ich denke, es ist wichtig Frage die beantwortet werden müssen, für Anfänger.
Ein zentraler Punkt der überlastung ist, es funktioniert in der Vererbung.
Weiter, entweder es ist
Static binding
oderDynamic binding
.Ist es Statische Bindung So, warum?
Statische Bindung
Compile time
.private
,final
undstatic
Methoden und Variablen verwendet statische Bindung und gebunden durch compiler.Dynamische Bindung
Dynamische Bindung erfolgt, während
Runtime
.Dynamische Methoden bonded während der Laufzeit basiert auf runtime-Objekt.
Dynamische Bindung verwendet Objekt zu lösen verbindlich.
Aber der wichtige Teil ist hier
Java-compiler ermittelt die richtige version von der überladenen Methode ausgeführt werden zur compile-Zeit basierend auf der Art der Argumentation verwendet, um rufen Sie die Methode und die Parameter der überladenen Methoden diese beiden Klassen erhalten die Werte der Argumente in Aufruf und führt die überladene Methode.
Also, wenn Sie erstellen Referenz vom Typ B, dann wird die Suche nach der richtigen argument geben
und für obige code wird ausgeführt, beide Methoden.
aber für obige code wird es geben, compile-Zeit-Fehler für float-Argumente.
Hoffe es klärt alle Zweifel.
Die Methode
add()
in der Klasse A ist auch für Klasse-B-durch erbschaft, daher ist die Methodeoverloaded
in der Klasse durch ändern des Datentyps vonint, int
zufloat, float
.Das Konzept der Überlastung kommt im Spiel, wenn-und nur wenn-die Funktionen sind in dem gleichen Umfang oder Klasse.
cz ist dies der Fall, die Methode überladen dann für die gleiche Methode, die Signatur oder das gleiche argument geben Sie den compiler bekommt, verwirren und geben muss compile-Zeit-Fehler .
aber in dem oben genannten Programm in der Klasse B wenn Sie die gleichen Argumente in der gleichen Reihenfolge, dann nach überlastung es muss Fehler geben, aber es ist nicht passiert u können es überprüfen, habe ich bereits.
Es ist der Fall der Vererbung, wo durch die Objekt-Referenz, wenn Sie jede Methode aufrufen, dann kann der compiler überprüfen, in untergeordneten Klasse ,wenn Ihr es nicht dann ist es einen Blick auf die übergeordnete Klasse, die die oben genannten Programm.
hoffe, das ist hilfreich.