Statisch können Sie angeben, dass es aufgerufen werden soll. Sie müssen nicht unbedingt die Schnittstelle innerhalb der aufrufenden Klasse implementieren. Zum Beispiel:
%Vor%Aber um es auszuführen, müssen Sie es irgendwo implementieren, da die Schnittstelle nur beschreibt, wie sich etwas verhält, aber nicht das tatsächliche Verhalten liefert (dh es nicht implementiert).
>Sie können auf diese Weise:
%Vor% Rufen Sie jetzt savePerson
auf p auf. Sie implementieren IPerson
, ohne eine separate Klasse zu erstellen.
Sie können das nicht, weil die Methode keine Definition enthält (Methodenkörper). Der Zweck einer Schnittstelle ist, sie irgendwo zu implementieren, so dass Sie eine tatsächliche Implementierung dieser Methode haben.
Nein Sie können es nicht aufrufen, Sie müssen die Implementierung atleast bereitstellen
Neben der Aufrufmethode benötigen Sie ein Objekt. Sie können keine Schnittstelle instanziieren, ohne dass die Implementierung bereitgestellt wird
Die Schnittstelle ist nur eine Definition von Methoden ohne Implementierung. Wenn Sie die Methoden nicht implementieren, was werden sie tun, wenn Sie sie aufrufen?
Andererseits wird eine Schnittstelle nicht unbedingt von der aufrufenden Klasse implementiert. In diesem Fall kann HulkHogan die Methode savePerson () eines anderen Objekts aufrufen, ohne sie selbst zu implementieren. Aber irgendeine Klasse muss es irgendwo implementieren, damit es etwas tut.
Sie müssten es für ein Objekt aufrufen, das eine Instanz der Schnittstelle ist, also müsste entweder HulkHogan
IPerson
implementieren oder eine Instanz von etwas, für das IPerson
implementiert werden soll ( oder instanziiert innerhalb, obwohl das nicht bevorzugt wird HulkHogan
.
Mehr auf den Punkt (basierend auf Ihren vorherigen Fragen), was erwarten Sie, indem Sie eine Methode aufrufen, die keine Implementierung hat?
Das Ziel einer Schnittstelle ist es, einen spezifischen und bekannten Vertrag für einen bekannten Objekttyp zu vergeben. Zum Beispiel haben alle Stacks traditionell push (), pop () und peek (). Wenn Sie also eine Schnittstelle schreiben, schreiben Sie ausdrücklich einen Vertrag, dem jeder folgen sollte, der einen Stack schreibt.
Um es anders auszudrücken, es ist eine Vorlage, die vorschreibt, dass jede Klasse, die sich Stack nennt, Methoden wie push (), pop () und peek () implementieren muss, wie in meinem Beispiel hier besprochen.
%Vor%Es ist eine objektorientierte Technik. An dieser Stelle erhalten Sie keine Kompilierung, weil Sie nicht mindestens Methoden für die Schnittstellenmethoden implementiert haben. Sie müssen Methoden schreiben, die den Signaturen der Schnittstelle entsprechen, bevor Sie die Schnittstelle vollständig verwenden können.
Wenn Sie sagen, dass Sie eine Schnittstelle für eine Klasse implementieren, meinen Sie tatsächlich, dass Sie einen Vertrag (oder eine Disziplin) einhalten, der in der Schnittstelle definiert ist, dh Sie geben die Definition für die Methode in der Schnittstelle an fühle, dass die Schnittstelle ein Container ist, der eine Regel enthält,
Sie haben gesagt, dass Sie die Methode in der Schnittstelle aufrufen wollen: das ist keine Methode an sich, die nur eine Regel ist. Also, was ist der Punkt, ruft eine Methode auf, die keinen Körper hat (tatsächlich ist es keine Methode an sich) )
... genieße
Sie können einen Proxy erstellen, der keine Aufrufe an die Schnittstelle verfälscht. Dies erstellt jedoch effektiv eine Implementierung dynamisch. Sie können nicht vermeiden, eine Implementierung irgendeiner Art zur Verfügung zu stellen.
Sie können die Methode nicht aufrufen, solange sie keinen implementierten Körper hat. Die implementierende Klasse wird ihr den Körper geben, den Sie brauchen. In Java 8 können Sie den Methodenrumpf innerhalb der Schnittstelle selbst implementieren und den statischen Zugriffsmodifikator dafür verwenden. In diesem Fall müssen Sie nur die Schnittstelle in Ihre aktuelle Klasse importieren (falls sie in einem anderen Paket ist) und dann können Sie die Methode direkt aufrufen.
Tags und Links java