public class Ex7 {
private int fld;
private void meth(int val) {
fld = val;
System.out.println(" meth() -> fld = " + fld);
}
public class Ex7Inner1 {
void operateOnFld() {
fld = 12;
}
void operateOnMeth() {
meth(10);
}
public void bar() {
System.out.println(" bar() ");
}
}
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1();
// how to call i1.bar() ??
i1.bar();
}
}
Répondre
Votre problème est que vous devez appeler i1.bar()
à l'intérieur d'une fonction. Par exemple
class Ex7Inner2 {
Ex7Inner1 i1 = new Ex7Inner1(); // this is now a field of the Ex7Inner2 class
public void callBar() {
i1.bar(); // this will work
}
}
À l'avenir, vous pouvez constater que les gens peuvent être plus utiles si vous incluez l'erreur que vous obtenez dans votre question, que je vais le faire maintenant. Lorsque vous essayez de compiler le code votre chemin, vous obtenez une erreur qui ressemble
Ex7.java:26: <identifier> expected
i1.bar();
^
1 error
Ceci est parce que la seule chose que vous pouvez faire en dehors d'une méthode (comme vous l'aviez à l'origine) est déclarer des variables. Donc, il attendait un "identifiant" par lequel il signifiait "le nom de la variable que vous déclarez". Donc, si vous aviez dit
String s;
alors s
aurait été l'identificateur.
maintenant je sens que c'était une question stupide .. comment aurais-je pu écrire un tel code? –
Haha, je me retrouve souvent à poser la même question sur mon propre code. Ne le laissez pas tomber, vous n'êtes pas seul! –
Quelques petites erreurs ici;
- votre inner2 doit être appeler la à l'intérieur d'une i1 fonction
- puisque vous n'avez pas déclaré inner1 statique, il a besoin d'une instance de la renfermant Ex7 d'exister.
Ainsi, vous pouvez faire quelque chose comme ceci:
public class Ex7 {
private Ex7Inner1 i1;
public class Ex7Inner1 {
public void bar() {
System.out.println(" bar() ");
}
}
class Ex7Inner2 {
// how to call i1.bar() ??
public Ex7Inner2() {
Ex7.this.i1.bar();
}
}
}
Pour accéder au Ex7 du i1. Où votre instance Ex7 contient un inner1 et un inner2 et votre référence de inside2 est inner2 -> parentEx7 -> child inner1.
Si vous définissez la classe interne statique, vous pouvez supprimer la référence Ex7, car vous définissez que la classe interne n'a pas besoin d'une instance de la classe externe pour exister.
mais il n'existe aucune méthode dans la classe Ex7Inner2. Crée une méthode avec 'i1.bar();' appeler à l'intérieur et il compile ok
Ex7Inner1
besoin d'une référence à Ex7
afin d'instancier. De Ex7Inner2
cette référence est Ex7.this
.
parleras ainsi
Ex7Inner1 i1 = Ex7.this.new Ex7Inner1()
Voir la Java Tutorial de plus d'informations.
- 1. Méthode Classe interne locale
- 2. instanciation une classe interne
- 3. Comment faire référence à la classe externe dans une autre instance d'une classe interne non statique?
- 4. Comment transférer une classe interne?
- 5. Une classe interne privée synthétise une classe anonyme inattendue
- 6. Utilisation interne de classe des propriétés publiques
- 7. Classe interne anonyme dans groovy
- 8. Comment déclarer une ressource d'une classe interne privée dans WPF?
- 9. Comment définir un champ interne de classe de base
- 10. C# - Comment accéder à la classe interne de l'assemblage externe
- 11. java - IO sur la classe interne
- 12. Comment accéder à la classe interne à l'aide de Reflection
- 13. comment accéder à champ de classe interne à l'intérieur javascript
- 14. Comment obtenir la taille interne/client d'une sous-classe NSView?
- 15. AspectJ Points de jointure de la classe interne
- 16. Comment obtenir une référence à la classe englobante d'une classe interne anonyme en Java?
- 17. Quel est le problème avec une classe interne n'utilisant pas une classe externe en Java?
- 18. constructeur interne
- 19. C# Obtenir le nom du type dérivé à partir de la classe de base interne Classe
- 20. Invoke méthode dans une autre classe
- 21. Comment créer une instance d'une classe dans une autre classe en Python
- 22. Comment appeler une méthode à partir d'une instance d'une classe?
- 23. Diffuser une instance de classe dans une sous-classe
- 24. Appeler une méthode de classe dans une classe
- 25. Instance de classe de base unique
- 26. Comment savoir si une classe descend d'une autre classe
- 27. les mots-clés pour la classe externe d'une classe interne anonyme
- 28. Comment activer une minuterie à partir d'un autre fil/classe
- 29. Accéder à la classe interne lors de la création de BitmapField et l'ajouter dans HorizontalFieldManager
- 30. Linq jointure interne de regroupement
Avez-vous essayé? Qu'est-il arrivé? Je ne l'ai pas essayé, mais j'ai des doutes sur le fait que votre classe publique sera en fait publique, mais cela devrait fonctionner. –
la réponse n'a en fait rien à voir avec les classes internes, c'est une erreur de syntaxe de base. – skaffman
J'ai raté le problème avec Ex7Inner2. J'attends qu'Eclipse démarre. –