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
}
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
und eine andere Klasse, d.h. TestClass
Dadurch wird die Instanz einer Unterklasse erstellt, in die wir someMethod()
;
Dieses Programm druckt
Dies beweist, dass wir die Instanz der Unterklasse erstellen.
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.
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.
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:
... gibt
aus %Vor%(Zumindest auf Oracle JVM; ich weiß nicht, ob die Namenskonvention in der JLS ist oder ob es JVM-spezifisches Verhalten ist.)
wir können die Schnittstelle nicht instatieren (da kein Konstruktor vorhanden ist).
Sie können eine anonyme innere Klasse erstellen:
%Vor% Deshalb erstellen Sie ein neues interface
, das die angegebene %code% implementiert.
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.
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%
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.
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.
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:
... gibt
aus %Vor%(Zumindest auf Oracle JVM; ich weiß nicht, ob die Namenskonvention in der JLS ist oder ob es JVM-spezifisches Verhalten ist.)
wir können die Schnittstelle nicht instatieren (da kein Konstruktor vorhanden ist).
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.
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.
Tags und Links java