Was ist der Zugriffsmodifizierer des Konstruktors einer anonymen Klasse?

8

HINWEIS: Dies ist eine selbst beantwortete Frage. Es mag sehr einfach sein, aber ich dachte, es wäre es wert, geteilt zu werden.

Angenommen, ich habe eine anonyme Klassendeklaration:

%Vor%

wo MyObject ist:

%Vor%

Von diesem Abschnitt des Java-Sprachspezifikation (Hervorhebung von mir):

  

Eine anonyme Klasse kann keinen explizit deklarierten Konstruktor haben. Stattdessen wird ein anonymer Konstruktor implizit für eine anonyme Klasse deklariert.

Wenn ich versuche, die Anzahl von public Konstruktoren zu erhalten:

%Vor%

Es wird wie erwartet Null ausgegeben, d. h. der anonyme Konstruktor ist nicht public .

Es ist auch nicht private , da, wenn wir Folgendes aus einer anderen Klasse im selben Paket aufrufen, in dem die anonyme Klasse definiert ist (indem Sie die Instanz myObj1 weitergeben):

%Vor%

Er vervollständigt ohne ein IllegalAccessException .

Was ist der Zugriffsmodifikator des impliziten Konstruktors in einer anonymen Klasse?

    
manouti 20.11.2015, 21:04
quelle

1 Antwort

9

Der anonyme Konstruktor verhält sich ähnlich wie der Standardkonstruktor , dass der Compiler auch für eine normale Klasse erstellt, die keine Konstruktoren deklariert. In diesem Fall:

  

Wenn in einem Klassentyp die Klasse public deklariert wird, erhält der Standardkonstruktor implizit den Zugriffsmodifikator public (§6.6); Wenn die Klasse protected deklariert ist, erhält der Standardkonstruktor implizit den Zugriffsmodifikator protected (§6.6); Wenn die Klasse private deklariert ist, erhält der Standardkonstruktor implizit den Zugriffsmodifikator private (§6.6); Andernfalls hat der Standardkonstruktor den Standardzugriff, der durch keinen Zugriffsmodifikator impliziert wird .

Mit anderen Worten, der anonyme Konstruktor ist nur im selben Paket wie die anonyme Klasse zugänglich.

    
manouti 20.11.2015 21:04
quelle