Je pensais que les classes internes pouvaient accéder aux variables / méthodes de la classe externe?
J'ai lu un certain nombre de sujets à discuter de classes internes, et j'ai eu l'impression que l'intérieur de la classe a accès aux variables et méthodes de la classe englobante. Dans le suivant, je dispose d'un extérieur de la classe et un à l'intérieur de la classe, dans la classe de test j'ai créer une instance de l'extérieur de la classe et puis depuis que j'ai créer une instance de l'intérieur de la classe. Cependant, je ne suis pas en mesure d'accéder à la Chaîne à une variable à l'intérieur de la classe de référence. De l'aide?
public class OuterClass {
String a = "A";
String b = "B";
String c = "C";
class InnerClass {
int x;
}
public static class StaticInnerClass {
int x;
}
public String stringConCat() {
return a + b + c;
}
}
public class TestStatic {
public static void main(String args[]) {
OuterClass.StaticInnerClass staticClass = new OuterClass.StaticInnerClass();
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
System.out.println(inner.a);//error here, why can't i access the string
//variable a here?
}
}
source d'informationauteur rage
Vous devez vous connecter pour publier un commentaire.
L'intérieur de la classe peuvent accéder à l'extérieur de la classe des méthodes et des propriétés par le biais de ses propres méthodes. Regardez le code suivant:
Il semble que vous êtes confus de la portée et de l'accès. Les références peuvent accéder uniquement aux attributs et méthodes de l'objet auquel elles se rapportent. Si votre
inner.a
ne peuvent pas travailler.D'autre part, à l'extérieur de variables de classe sont dans le champ d'application de méthodes dans un intérieur de classe. De sorte que vous pouvez faire ce que vous voulez par la définition d'un accesseur en lecture.
inner
est une instance deOuterClass.InnerClass
qui n'est pas définita
de sorte qu'il ne sera pas en mesure d'y accéder, de toute façon.Comprendre de la manière la plus simple... regardez le bloc dans lequel
a
est créé et le bloc dans lequelOuterClass.InnerClass
est défini.Un
Non-static inner class
a un référence implicite à laOuterClass
.....Essayer comme ça.....
Vous essayez de lire
a
comme si elle est une propriété de l'intérieure de la classe, mais il ne l'est pas. Vous devez définir une méthode qui vous permettra de lire la propriété désirée de l'extérieur de la classe. Ainsi, dans l'intérieur de votre classe, vous devez avoir:Cela devrait fonctionner.