Das Überschreiben einer Methode kann verhindert werden, indem das Schlüsselwort final
verwendet wird, ebenso wie eine Überlastung verhindert werden kann.Wie verhindert man, dass eine Methode in Java überlastet wird?
Antwort
Sie können das in Java nicht tun.
Eine überladene Methode ist im Grunde nur eine andere Methode.
Ein Versuch aussehen könnte (etwas) wie diese
void yourMethod(String arg) { /* ... */ }
void yourMethod(String arg, Object... prevent) {
throw new IllegalArgumentException();
}
aber es wird nicht funktionieren, da Java behebt, indem man die „beste Übereinstimmung“ oder „die meisten spezifischen Signatur“ zu überlasten.
Das Verfahren könnte noch mit einem
void yourMethod(String arg, String arg2) { /* ... */ }
überlastet werden, die, wenn yourMethod("hello", "world")
tun genannt würde.
BTW, warum möchten Sie eine Überlastung verhindern? Vielleicht gibt es eine andere Art zu tun, was Sie wollen?
Markieren Sie die Klasse final und sie kann nicht erweitert werden. Das könnte jedoch einen anderen Zweck besiegen.
Wenn Sie eine Methode überladen, haben Sie eine Methode mit demselben Namen aber unterschiedlichen Parametertypen erstellt. In Java ist eine Methode (teilweise) hinsichtlich ihrer Parameter definiert, und wenn zwei Methoden denselben Namen, aber unterschiedliche Parameter haben, sind sie Äpfel und Orangen, d. H. Nicht gleich. Kurz gesagt, Sie können nicht verhindern, dass jemand neue Methoden in einer Klasse erstellt, was im Wesentlichen das ist, wonach Sie fragen.
Overriding und Overloading sind verschiedene Techniken. Überladen ist eine Möglichkeit, mehrere Methoden mit denselben Namen, aber unterschiedlichen Parametertypen oder unterschiedlichen Parametern zu deklarieren.
Überladung ist überhaupt keine OOP-Technik. Es ist eine praktische Eigenschaft, die statische Informationen zur Kompilierzeit verwendet, um zwei möglicherweise völlig nicht verwandten Funktionen im Quellcode den gleichen Namen zu geben. – Zorf
Danke Lajla. Ich wusste nicht, dass es nicht Teil von OOP ist. – Sujee
Das Wort 'OOP' wurde aus meiner Antwort entfernt, da ich falsch verstanden habe, dass Überladen eine der OOP-Techniken ist. – Sujee
Sie können eine Methode verhindern es endgültig, indem sie überschrieben werden, aber man kann ein Verfahren davon, dass überlastet nicht verhindern. Gut, technisch könnte man die Klasse selbst final machen, so dass durch das Erstellen einer Unterklasse überhaupt keine Methoden hinzugefügt werden können, aber ich denke nicht, dass das ein gutes Design ist.
Methoden werden überschrieben, nicht überschrieben. –
Sie hatten sechs Jahre Zeit, um das Problem zu beheben. Abstimmung zum Löschen – EJP
Sie können nicht. Weil es fast sinnlos ist.
Wenn Sie die Methode handle(..)
überladen möchten, aber Sie nicht zulassen, erstellen Sie stattdessen doHandle(..)
.
Welche überladene Methode verwendet wird, wird zur Kompilierzeit bestimmt (im Gegensatz zu überschriebenen Methoden, die zur Laufzeit ermittelt werden). Der Punkt des Überladens besteht also darin, einen gemeinsamen Namen für allgemeine Vorgänge zu verwenden. Es ist eher eine Frage des Code-Stils, als alles andere.
+1 für sinnlos. Ein Compiler wird niemals eine der Überlademethoden auswählen, sondern die überladene Methode. –
Err ... was ist der Grund dafür, die Methode nicht überladen zu lassen?
Der Schutz vor dem Überschreiben ist zulässig, da dies von einem anderen Programmierer ausgeführt werden kann, der angeblich an einem anderen Teil des Codes arbeitet und seine Klasse von Ihrer Klasse geerbt wird.
Das Überladen erfolgt in derselben Klasse und sollte logisch von einem Programmierer ausgeführt werden, der diesen Code kennt und an demselben Teil des Codes arbeitet.Also, wenn er diesen Code (theoretisch) kennt und die Gefahr einer Überlastung besteht, dann sollte er das schon wissen, weil er den Code kennt.
Das heißt, Überladung kann nicht gestoppt werden, wie andere bereits beschrieben haben.
einfach! Nenne diese überladene Methode nicht.
public class Test
{
public void m(int a)
{
*your definition*
}
public void m(float a)
{
*your definition*
}
}
public static void main(Strings [] args)
{
Test t=new Test();
t.m(5);
}
- 1. Wie verhindert man, dass eine Funktion in Python überschrieben wird
- 2. Wie erzwinge ich, dass eine Methode in Java überschrieben wird?
- 3. Wie verhindert man, dass Ihre Klasse in C++ vererbt wird?
- 4. Wie verhindert man, dass HTML5-Audio beim Laden vorgeladen wird?
- 5. Wie verhindert man, dass InnoSetup Startmenüverknüpfungen erstellt?
- 6. Wie verhindert man, dass das Hintergrundbild unscharf wird
- 7. Wie verhindert man, dass die JBoss-Cache-Region gelöscht wird?
- 8. Wie kann eine RESTful-Service-Methode am besten überlastet werden?
- 9. Wie verhindert man, dass CALayer Hintergrundfarbe zeichnet?
- 10. Wie verhindert man, dass Babel Generatorfunktionen umspringt
- 11. Wie kann verhindert werden, dass eine Methode in der abgeleiteten Klasse überschrieben wird?
- 12. Wie verhindert man, dass der Java-Stream dieselbe Methode zweimal ausführt?
- 13. Wie verhindert Python, dass eine Klasse unterklassifiziert wird?
- 14. DBGrid: Wie kann verhindert werden, dass eine Zeile ausgewählt wird?
- 15. WPF: Wie verhindert man, dass ein Steuerelement eine Tastengeste stiehlt?
- 16. Wie kann verhindert werden, dass eine WPF-App geladen wird?
- 17. Wie verhindert man, dass Waf Objektdateien umbenennt?
- 18. Wie verhindert man, dass die Tischhöhe überläuft?
- 19. Warum verhindert eine Datetime, dass eine Navigationseigenschaft geladen wird?
- 20. Wie verhindert man Fragmentierung in Java?
- 21. Wie verhindert man, dass EF eine Datenbank erstellt?
- 22. Wie verhindert man, dass der Browser eine JSON-Datei zwischenspeichert
- 23. Wie verhindert man, dass eine Datei von .htaccess redirect?
- 24. UIViewController verhindert, dass die Anzeige entladen wird
- 25. Wie verhindert man, dass eine Klasse in die Release-DLL eingebaut wird?
- 26. Wie verhindert man, dass ein Array von Einheitslänge im POST-Body in eine Zeichenfolge konvertiert wird?
- 27. Java Unit Test: Wie kann man überprüfen, dass eine private Methode aufgerufen wird?
- 28. Wie verhindert man, dass iOS Ascii in Emoji konvertiert?
- 29. Wie verhindert man, dass gcc einige Anweisungen in C optimiert?
- 30. Was verhindert, dass NetStream.onPeerConnect ausgelöst wird?
... wie Überschreiben :-) – aioobe