Statische Methoden in Java

7

Ich bin neu in der Java-Programmierung. Kann mir bitte jemand erklären warum das Programm "fa la" ausgibt obwohl die statische Methode überschrieben wird. Ich habe gelesen, dass statische Methoden in Java nicht überschrieben werden können. Bitte korrigieren Sie mich, wenn ich falsch liege.

%Vor%     
Student 08.04.2011, 02:42
quelle

6 Antworten

4

Auf statische Methoden sollte mit dem Klassennamen und nicht mit einer Objektreferenz zugegriffen werden. Das korrekte Äquivalent von dem, was Sie geschrieben haben, wäre:

%Vor%

Java rät , welche Methode Sie aufrufen möchten, basierend auf dem Typ der Objekt -Variable.

EDIT: Wie Stephen schon sagte, es ist nicht raten. Inferring wäre wahrscheinlich ein genaueres Wort. Ich habe nur versucht zu betonen, dass das Aufrufen von statischen Funktionen auf Objektreferenzen zu einem Verhalten führen kann, das Sie nicht erwarten würden. In der Tat habe ich gerade ein paar Dinge ausprobiert und herausgefunden, dass meine vorherige Aussage falsch war: Java entscheidet, welche Methode aufgerufen wird, basierend auf dem Variablen Typ. Das ist jetzt offensichtlich, da ich mehr darüber nachdenke, aber ich kann sehen, wie es zu Verwirrung führen könnte, wenn du so etwas wie:

tust %Vor%     
takteek 08.04.2011, 02:47
quelle
12

Sie können statische Methoden in Java nicht überschreiben. Es ruft einfach die statischen Methoden direkt für jede Klasse auf. BTW: Wie andere bemerkt haben, ist es eine schlechte Übung, statische Methoden für Instanzen aufzurufen. Zur besseren Übersicht sollten Sie Folgendes tun:

%Vor%

entspricht dem Code, den Sie in Ihrer Frage geschrieben haben.

    
Asaph 08.04.2011 02:45
quelle
4

t ist vom Typ Tenor und s ist vom Typ Singer .

Wenn Sie eine statische Methode für eine Instanz aufrufen (was eine schlechte Übung ist), rufen Sie die statische Methode für die Klasse des deklarierten Typs auf.

d. t.sing() entspricht Tenor.sing()

    
Synesso 08.04.2011 02:45
quelle
2

Statische Methoden werden nicht überschrieben. Sie gehören zu der Klasse, in der sie definiert sind. Das Aufrufen einer statischen Methode für eine Instanz dieser Methode funktioniert genauso wie das Aufrufen der Klasse, macht aber die Dinge weniger klar und führt dazu, dass die Leute denken, dass sie wie Instanzmethoden überschrieben werden.

    
unholysampler 08.04.2011 02:47
quelle
2

Statische Methoden können nicht überschrieben werden.

Die folgende Ressource wird Ihnen helfen, besser zu verstehen, was passiert, wenn Sie versuchen, die statische Methode zu überschreiben:

Ссылка

Grüße, Cyril

    
Cyril Deba 08.04.2011 02:54
quelle
0

Der Code, den Sie geschrieben haben, funktioniert gut, aber wahrscheinlich nicht so, wie Sie es beabsichtigt haben. Statische Methoden können nicht im herkömmlichen Sinne (oder mit dem von Ihnen erwarteten Verhalten) außer Kraft gesetzt werden. In Bezug auf welche Version der Methode aufgerufen wird, erfolgt dies bei Kompilierzeit , was die angezeigte Ausgabe erklärt.

Ja, und Sie sollten wahrscheinlich nur die Methoden aufrufen, die den Klassennamen verwenden.

    
kharles 08.04.2011 03:14
quelle

Tags und Links