2010-06-07 7 views

Antwort

12

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?

3

Markieren Sie die Klasse final und sie kann nicht erweitert werden. Das könnte jedoch einen anderen Zweck besiegen.

+0

... wie Überschreiben :-) – aioobe

0

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.

-1

Overriding und Overloading sind verschiedene Techniken. Überladen ist eine Möglichkeit, mehrere Methoden mit denselben Namen, aber unterschiedlichen Parametertypen oder unterschiedlichen Parametern zu deklarieren.

+2

Ü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

+0

Danke Lajla. Ich wusste nicht, dass es nicht Teil von OOP ist. – Sujee

+0

Das Wort 'OOP' wurde aus meiner Antwort entfernt, da ich falsch verstanden habe, dass Überladen eine der OOP-Techniken ist. – Sujee

-2

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.

+13

Methoden werden überschrieben, nicht überschrieben. –

+0

Sie hatten sechs Jahre Zeit, um das Problem zu beheben. Abstimmung zum Löschen – EJP

14

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.

+2

+1 für sinnlos. Ein Compiler wird niemals eine der Überlademethoden auswählen, sondern die überladene Methode. –

4

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.

0

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); 
} 
Verwandte Themen