Kann ich ein Objekt für die Schnittstelle erstellen?

8

Ist es möglich ein Objekt für eine Schnittstelle zu erstellen, wenn ja wie können wir? meiner Meinung nach sagt der folgende Code, dass wir:

Runnable r= new Runnable(){ // some implementation }

    
kalepu harish 01.07.2013, 09:00
quelle

7 Antworten

14

Dies erstellt nicht die Instanz von Interface, sondern erstellt eine Klasse, die die Schnittstelle implementiert. Also wenn du schreibst

%Vor%

Sie erstellen tatsächlich eine Klasse, die die Runnable-Schnittstelle implementiert. Sie müssen hier alle Regeln befolgen, hier überschreiben wir die Laufmethode für Runnable

%Vor%

und eine andere Klasse, d.h. TestClass

%Vor%

Dadurch wird die Instanz einer Unterklasse erstellt, in die wir someMethod() ; Dieses Programm druckt

%Vor%

Dies beweist, dass wir die Instanz der Unterklasse erstellen.

    
Prasad Kharkar 01.07.2013 09:01
quelle
11

Sie können eine Schnittstelle nicht direkt instanziieren, aber Sie können eine Klasse instanziieren, die diese Schnittstelle implementiert:

%Vor%

Dies ist im Grunde das Gleiche wie das, was Sie inline tun. Die Klammern nach neuem Runnable () enthalten Ihre Implementierung inline.

    
JREN 01.07.2013 09:01
quelle
8
___ answer17400687 ___

Sie können eine Schnittstelle nicht direkt instanziieren, aber Sie können eine Klasse instanziieren, die diese Schnittstelle implementiert:

%Vor%

Dies ist im Grunde das Gleiche wie das, was Sie inline tun. Die Klammern nach neuem Runnable () enthalten Ihre Implementierung inline.

    
___ answer17400703 ___
  

Ist es möglich, ein Objekt für eine Schnittstelle zu erstellen?

Nein. Der Code, den Sie angezeigt haben, erstellt ein Objekt aus einer anonymen Klasse , die die Schnittstelle implementiert. Im Hintergrund erstellt die JVM tatsächlich eine Klasse, die die Schnittstelle implementiert, und erstellt dann eine Instanz dieser Klasse.

Die "anonyme" Klasse generiert wird tatsächlich einen Namen haben, basierend auf dem Namen der Klasse, in der dieser Code erscheint, zum Beispiel class oder ähnlich. Zum Beispiel:

%Vor%

... gibt

aus %Vor%

(Zumindest auf Oracle JVM; ich weiß nicht, ob die Namenskonvention in der JLS ist oder ob es JVM-spezifisches Verhalten ist.)

    
___ answer17400714 ___

wir können die Schnittstelle nicht instatieren (da kein Konstruktor vorhanden ist).

    
___ answer17400721 ​​___

Sie können eine anonyme innere Klasse erstellen:

%Vor%

Deshalb erstellen Sie ein neues interface , das die angegebene %code% implementiert.

    
___ answer17400690 ___

Dies erstellt nicht die Instanz von Interface, sondern erstellt eine Klasse, die die Schnittstelle implementiert. Also wenn du schreibst

%Vor%

Sie erstellen tatsächlich eine Klasse, die die Runnable-Schnittstelle implementiert. Sie müssen hier alle Regeln befolgen, hier überschreiben wir die Laufmethode für %code%

%Vor%

und eine andere Klasse, d.h. %code%

%Vor%

Dadurch wird die Instanz einer Unterklasse erstellt, in die wir %code% ; Dieses Programm druckt

%Vor%

Dies beweist, dass wir die Instanz der Unterklasse erstellen.

    
___ qstnhdr ___ Kann ich ein Objekt für die Schnittstelle erstellen? ___ qstntxt ___

Ist es möglich ein Objekt für eine Schnittstelle zu erstellen, wenn ja wie können wir? meiner Meinung nach sagt der folgende Code, dass wir:

%code%

    
___ answer17400934 ___

Was Sie sehen, ist eine anonyme innere Klasse .

es erstellt eine Instanz eines neuen, anonymen Implementierers der Runnable-Klasse.

Da eine anonyme Klassendefinition ein Ausdruck ist, muss er Teil einer Anweisung sein.

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ answer49606182 ___

Hier ist mein Verständnis.

Eine Schnittstelle

%Vor%

Sie können ein Objekt für eine Schnittstelle deklarieren.

%Vor%

Sie können dieses Objekt nicht direkt über diese Schnittstelle instanzieren. Nehmen wir an, Sie haben eine Klasse, die diese Schnittstelle implementiert.

%Vor%

Dann können Sie das tun,

%Vor%

(Dies ist konzeptionell natürlich (wie Pseudocode) tatsächlichen Code kann variieren je nach Ihren Klassen und Zugriffsmodifizierer etc.)

Ich werde aktualisieren, warum genau wir dies tun / was der Punkt ist, sobald ich es herausfinde.

Hinweis: Einiges davon wurde in den obigen Antworten erwähnt, möchte aber nur, dass das OP auch diese ganze Sache kennt.

    
___
Uwe Plonus 01.07.2013 09:03
quelle
6
  

Ist es möglich, ein Objekt für eine Schnittstelle zu erstellen?

Nein. Der Code, den Sie angezeigt haben, erstellt ein Objekt aus einer anonymen Klasse , die die Schnittstelle implementiert. Im Hintergrund erstellt die JVM tatsächlich eine Klasse, die die Schnittstelle implementiert, und erstellt dann eine Instanz dieser Klasse.

Die "anonyme" Klasse generiert wird tatsächlich einen Namen haben, basierend auf dem Namen der Klasse, in der dieser Code erscheint, zum Beispiel YourClass oder ähnlich. Zum Beispiel:

%Vor%

... gibt

aus %Vor%

(Zumindest auf Oracle JVM; ich weiß nicht, ob die Namenskonvention in der JLS ist oder ob es JVM-spezifisches Verhalten ist.)

    
T.J. Crowder 01.07.2013 09:02
quelle
0

wir können die Schnittstelle nicht instatieren (da kein Konstruktor vorhanden ist).

    
Gaurav Manral 01.07.2013 09:03
quelle
0

Was Sie sehen, ist eine anonyme innere Klasse .

es erstellt eine Instanz eines neuen, anonymen Implementierers der Runnable-Klasse.

Da eine anonyme Klassendefinition ein Ausdruck ist, muss er Teil einer Anweisung sein.

    
bNd 01.07.2013 09:15
quelle
0

Hier ist mein Verständnis.

Eine Schnittstelle

%Vor%

Sie können ein Objekt für eine Schnittstelle deklarieren.

%Vor%

Sie können dieses Objekt nicht direkt über diese Schnittstelle instanzieren. Nehmen wir an, Sie haben eine Klasse, die diese Schnittstelle implementiert.

%Vor%

Dann können Sie das tun,

%Vor%

(Dies ist konzeptionell natürlich (wie Pseudocode) tatsächlichen Code kann variieren je nach Ihren Klassen und Zugriffsmodifizierer etc.)

Ich werde aktualisieren, warum genau wir dies tun / was der Punkt ist, sobald ich es herausfinde.

Hinweis: Einiges davon wurde in den obigen Antworten erwähnt, möchte aber nur, dass das OP auch diese ganze Sache kennt.

    
Bugsy 02.04.2018 06:10
quelle

Tags und Links