Kann ich eine Methode aufrufen, die sich in einer Schnittstelle befindet, ohne die Schnittstelle zu implementieren?

8

Kann ich eine Methode innerhalb einer Schnittstelle aufrufen, ohne die Schnittstelle in meiner Klasse zu implementieren?

%Vor%

Jetzt eine Klasse hier ...

%Vor%     
theJava 29.12.2010, 13:49
quelle

13 Antworten

6

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).

>     
rodion 29.12.2010, 13:56
quelle
5

Sie können auf diese Weise:

%Vor%

Rufen Sie jetzt savePerson auf p auf. Sie implementieren IPerson , ohne eine separate Klasse zu erstellen.

    
fastcodejava 29.12.2010 14:01
quelle
4

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.

    
RoflcoptrException 29.12.2010 13:52
quelle
3

Nein, du kannst nicht ... bcoz alle Methoden der Klassenschnittstelle sind abstrakt..und du kannst sie nicht verwenden, ohne die Klasse zu implementieren ...

    
Grace 29.12.2010 14:16
quelle
2

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

    
Jigar Joshi 29.12.2010 13:51
quelle
2

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.

    
jbx 29.12.2010 13:57
quelle
1

Wenn Sie implement nicht die Schnittstelle oder ein Member-Objekt einer Klasse haben, die die Schnittstelle implementiert, können Sie die Methode savePerson nicht verwenden, da sie definitionsgemäß noch keine Implementierung hat.

    
wkl 29.12.2010 13:52
quelle
1

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?

    
David 29.12.2010 13:53
quelle
1

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.

    
avgvstvs 29.12.2010 14:03
quelle
1

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

    
sij 29.12.2010 14:29
quelle
1

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.

    
Peter Lawrey 29.12.2010 15:23
quelle
0
%Vor%

Ich hoffe, die savePerson-Methode hat irgendwo in einer anderen Klasse eine Definition, die sie implementiert. Auf diese Weise können Sie die Methode innerhalb Ihrer Schnittstelle aufrufen.

    
Thalaivar 29.12.2010 14:05
quelle
0

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.

    
MDawas 08.02.2017 13:11
quelle

Tags und Links