Java règles de portée et les classes internes
Tous les fous de Java règles de portée sont faire ma tête de spin et de la public static void non-sens n'aide pas les choses. Jusqu'à présent, tous les langages de programmation que j'ai utilisé soit portée lexicale ou de certains rapprochement sans modificateurs d'accès, c'est à dire intérieure stuff capture externe trucs et dispose d'un accès à l'extérieur des trucs aussi longtemps que l'intérieur de trucs existe.
Alors, comment dois-je donner un sens à la détermination de la portée des règles à l'intérieur de classes en Java? - Ils accès aux variables déclarées à l'extérieur de la classe ou est-il une pointe bizarres cas, j'ai à m'inquiéter, car de tous les public static private trucs flottant autour?
S'il vous plaît (1) de la tonalité vers le bas et (2) de préciser votre question. Le "fou Java règles de portée", vous parlez sont identiques à 'portée lexicale" comme en C++. Vous devez expliquer ce que vous entendez par "le" public static void' non-sens": c'est une autre fonctionnalité qui existe aussi en C++. Et "le" public static private "trucs qui flottent autour de" n'existe pas: c'est juste une contradiction dans les termes.
Assez sûr que l'OP vient d'un langage de script le fond avec la véritable portée lexicale (par exemple, JavaScript, Ruby,...) et moins d'accent sur les mots clés de modificateur de tous sur la place. Juste pour dire.
Il s'agit de poster des bêtises aussi.
Votre question est claire et votre humeur est humanoïde. Nous ne sommes pas des machines, et ne devrait pas agir comme tel.
OriginalL'auteur davidk01 | 2011-01-31
Vous devez vous connecter pour publier un commentaire.
Statique classes imbriquées1 sont exactement comme des classes externes, sauf qu'ils ont accès à tous les membres de l'extérieur de la classe, quel que soit l'accès de qualification. Ils existent en dehors de toute instance de l'extérieur de la classe, donc besoin d'une référence à une instance dans le but d'accéder à toutes les variables d'instance ou de la non-méthodes statiques de l'extérieur de la classe.
Non-statique classes imbriquées (appelé les classes internes) venir à l'existence que dans le cadre d'une instance de l'extérieur de la classe. Lors de sa construction, il y a un deuxième
this
champ généré automatiquement, vous pouvez accéder à partir à l'intérieur de la classe à l'aide de la syntaxeOuter.this
. Chaque instance de l'intérieur de la classe est fermée par une seule instance de l'extérieur de la classe. Encore une fois, tous les privilèges d'accès de la statique des classes imbriquées appliquer à l'intérieur des classes. Mais puisqu'ils ont déjà une instance de l'extérieur de la classe, on peut accéder automatiquement les variables d'instance et les méthodes de l'extérieur de la classe.Pour une belle (et très détaillé) discussion de l'intérieur des classes et des spécificateurs d'accès, vous pouvez lire la Intérieure Spécification de Classe. Il décrit, entre autres choses, comment une classe imbriquée obtient l'accès à
private
membres de l'extérieur de la classe(es). Un plus doux de lire est le Classes imbriquées tutoriel.Un hors-sujet à part: Supposons que vous avez cette structure de classe:
et vous avez créé une instance de
O
:Maintenant, supposons que vous voulez créer une instance de
O.I
. vous ne pouvez pas utilisernew O.I()
parce que la nouvelle instance deI
doit être délimitée par une instance spécifique deO
. Pour cela, Java fournit la syntaxe suivante:Puis
inner
aura alors son deuxièmethis
de champ reportez-vous àouter
.Noter que cette "qualifié
new
opérateur" syntaxe est utilisée uniquement pour les classes internes; il serait inutile (en fait, une erreur) siI
ont été unstatic
classe imbriquée.1 Vous aurez souvent rencontré le membre de phrase "statique à l'intérieur de la classe" (y compris, embarrassante, dans une version antérieure de cette réponse). C'est une terminologie erronée. En Java, "les classes internes" sont en particulier la non-
static
classes imbriquées.C'est assez clair. Donc, si je vous ai bien compris tout type de variable déclarée à l'extérieur de la classe, indépendamment de tout type de modificateur d'accès est accessible à partir d'un non-statique à l'intérieur de la classe. Donc, toutes statique et privé de variables et de méthodes à l'extérieur des classes sont accessibles à partir de l'intérieur de la classe.
C'est à ce sujet. Si la performance est critique, sachez qu'il y a une légère pénalité en temps et en mémoire pour un intérieur de classe à accès protégé ou privé des membres de l'extérieur de la classe (et vice versa). Une fois compilées, les classes internes (statiques ou non) sont traités dans le byte code des classes séparées. Ainsi, le compilateur doit créer des fonctions d'accesseur de sorte que le byte code obéit à des règles d'accès.
OriginalL'auteur Ted Hopp
Il faut différencier:
Avoir à l'esprit qu'un non-statique à l'intérieur de la classe a également une variable cachée avec l'instance de l'extérieur de la classe, à l'accès aux membres. Et que toutes référencées final champs (par conséquent, ils doivent être final) sont copiés dans l'intérieur de la classe dans d'autres cachés membre variables à l'intérieur de la classe est instanciée.
Exemple:
OriginalL'auteur Daniel
Je ne sais pas si ça aide, mais à partir de la tutoriels java:
Vous devriez vérifier la java tutoriel sur les classes imbriquées.
OriginalL'auteur Andre85
Règles de l'Intérieur de classes en Java
this.x
pour l'intérieur x etOuterClassname.this.x
pour l'extérieur x.Outer.Inner ob = new Outer.new Inner();
Outer.Inner ob = new Outer.Inner();
Outer.super.variable;
Outer.super.method(params);
OriginalL'auteur alexvipul
Règles à l'intérieur de la classe
OriginalL'auteur user2701769
Méthode Étendue de classes internes:-
Ne peuvent accéder à la finale des membres de l'extérieur de la classe.
OriginalL'auteur Shikhar