Cet article présente principalement l'explication détaillée et les exemples des classes internes de base Java. Les amis qui en ont besoin peuvent se référer à
L'explication détaillée et les exemples des classes internes de base Java
Les classes internes ne sont pas faciles à comprendre, mais pour parler franchement, une classe contient en fait une autre classe
Tout comme une personne est composée d'un cerveau, de membres, d'organes et d'autres parties du corps, les classes internes sont assez à l'un des organes, comme le cœur : il a aussi ses propres attributs et comportement (sang, battements)
Evidemment, il ne peut pas être utilisé ici de manière unilatérale Un attribut ou une méthode représente un cœur, ce qui nécessite une classe
et le cœur est dans le corps humain, tout comme la classe interne est à l'extérieur
Exemple 1 : La classe de base structure de la classe interne
//外部类 class Out { private int age = 12; //内部类 class In { public void print() { System.out.println(age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out().new In(); in.print(); //或者采用下种方式访问 /* Out out = new Out(); Out.In in = out.new In(); in.print(); */ } }
Résultat de l'exécution : 12
Il n'est pas difficile de voir à partir de l'exemple ci-dessus que les classes internes endommagent en fait sérieusement la bonne structure de code, mais pourquoi ? Qu'en est-il de l'utilisation de classes internes ?
Parce que la classe interne peut utiliser librement les membres de la classe externe variables (y compris privées) sans générer l'objet de la classe externe, c'est le seul avantage de la classe interne
Tout comme le cœur peut accéder directement au sang du corps au lieu de prélever du sang par l'intermédiaire d'un médecin
Une fois le programme compilé, deux fichiers .class seront générés, à savoir Out.class et Out$In.class
Où $ représente celui de Out.In dans le programme ci-dessus.
Out.In in = new Out().new In() peut être utilisé pour générer des objets de classes internes. Cette méthode Il y a deux petits points de connaissance qui doivent être notés
1. Le Out au début est d'indiquer quelle classe externe l'objet de classe interne doit être généré. est situé
2. Il doit y avoir un objet de la classe externe avant de pouvoir être généré L'objet de la classe interne, car la fonction de la classe interne est d'accéder aux variables membres de la classe externe
Exemple 2 : Formulaire d'accès aux variables dans la classe interne
class Out { private int age = 12; class In { private int age = 13; public void print() { int age = 14; System.out.println("局部变量:" + age); System.out.println("内部类变量:" + this.age); System.out.println("外部类变量:" + Out.this.age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out().new In(); in.print(); } }
Résultats d'exécution :
Variables locales : 14
Classe interne variables : 13
Variables de classe externes : 12
Comme on peut le trouver dans l'instance 1, la classe interne En l'absence de variables membres et de variables locales portant le même nom, la classe interne sera directement accéder aux variables membres de la classe externe sans spécifier Out.this. Nom de l'attribut
Sinon, les variables locales de la classe interne écraseront les variables membres de la classe externe de
et accéderont aux variables membres de la classe interne elle-même peut utiliser ce nom d'attribut. L'accès aux variables membres de la classe externe nécessite l'utilisation du nom d'attribut Out.this
Exemple 3 : StatiqueClasse interne.
class Out { private static int age = 12; static class In { public void print() { System.out.println(age); } } } public class Demo { public static void main(String[] args) { Out.In in = new Out.In(); in.print(); } }
Résultat d'exécution : 12
Comme vous pouvez le voir, si vous utilisez static pour rendre la classe interne statique, alors la classe interne ne peut accéder qu'à la classe interne variables membres de la classe externe, qui ont des limites
Deuxièmement, parce que la classe interne est statique, Out.In peut être vu dans son ensemble et l'objet de la classe interne peut être directement nouveau (Accès statique via le nom de la classe n'a pas d'importance si un objet de classe externe est généré ou non)
Exemple 4 : Classe interne privée
class Out { private int age = 12; private class In { public void print() { System.out.println(age); } } public void outPrint() { new In().print(); } } public class Demo { public static void main(String[] args) { //此方法无效 /* Out.In in = new Out().new In(); in.print(); */ Out out = new Out(); out.outPrint(); } }
Résultat d'exécution : 12
Si une classe interne veut uniquement être exploitée par des méthodes dans la classe externe, alors vous pouvez utiliser private pour déclarer la classe interne
Dans le code ci-dessus, nous devons générer le In class dans la classe Out Object est exploité, et Out.In in = new Out().new In() ne peut plus être utilisé pour générer un objet de la classe interne
En d'autres termes, la classe interne la classe à ce moment ne peut être contrôlée que par la classe externe
Comme dans, mon cœur ne peut être contrôlé que par mon corps, les autres ne peuvent pas y accéder directement
Instance 5 : Méthode interne class
class Out { private int age = 12; public void Print(final int x) { class In { public void inPrint() { System.out.println(x); System.out.println(age); } } new In().inPrint(); } } public class Demo { public static void main(String[] args) { Out out = new Out(); out.Print(3); } }
Résultats d'exécution :
3
12
Dans le code ci-dessus, nous avons déplacé la classe interne vers la méthode de la classe externe, puis dans la méthode de la classe externe. Ensuite, générez un objet de classe interne pour appeler la méthode de la classe interne
Si nous devons passer des paramètres dans la méthode de la classe externe à ce moment , alors les paramètres de méthode de la classe externe doivent être définis en utilisant final
Quant à final, il n'a pas de signification particulière ici, c'est juste une forme d'expression.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!