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%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%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.
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.
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
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.
Tags und Links java