Préface
Une fermeture est un objet appelable qui enregistre certaines informations de la portée dans laquelle il a été créé. Grâce à cette définition, on peut voir que la classe interne est une fermeture orientée objet, car elle contient non seulement des informations sur l'objet de classe périphérique (la portée de la création de la classe interne), mais a également automatiquement une référence à l'objet de classe périphérique. Dans ce rôle, la classe intérieure a le droit d'exploiter tous les membres, y compris les membres privés.
L'un des problèmes les plus controversés de Java est que l'on pense que Java devrait inclure un mécanisme de type pointeur pour permettre des rappels. Grâce au rappel, l'objet peut transporter des informations qui lui permet d'appeler l'objet initial à un moment ultérieur. Si le rappel est implémenté via un pointeur, vous pouvez seulement espérer que le programmeur n'utilisera pas le pointeur.
1. Classe interne de membres
Une classe intérieure peut être considérée comme un membre. La classe intérieure des membres peut accéder inconditionnellement à toutes les propriétés des membres et aux méthodes membres des classes externes.
class OutterClass {// class external private int in = 0; Static int inn = 4; public OutterClass (int in) {this.in = in; } class innerclass {// classe interne public void output () {System.out.println (in); System.out.println (Inn); }}}Lorsqu'une classe interne membre possède une variable ou une méthode membre avec le même nom qu'une classe externe, les membres de la classe interne membre sont accessibles par défaut. Si vous souhaitez accéder à un membre du même nom d'une classe externe, vous devez y accéder dans le formulaire suivant:
OutterClass (classe externe).
Lorsqu'une classe externe accède à une classe interne, vous devez d'abord créer un objet de la classe interne membre, puis y accéder via une référence à cet objet.
class OutterClass {private int in = 0; Static int inn = 4; public OutterClass (int in) {innerclass inner = new InnerClass (); this.in = inner.innernum; } classe innerclass {// classe intérieure publique int internenum = 1; public void Output () {System.out.println (in); System.out.println (Inn); int a = outterclass.this.inn; }}}Les classes internes des membres existent basées sur des classes externes, c'est-à-dire que si vous souhaitez créer un objet de la classe interne du membre, la prémisse est qu'un objet de la classe externe doit exister. La façon générale de créer un objet de classe interne membre est la suivante:
classe publique classe class {public static void main () {OutterClass oc = new OutterClass (3); OutterClass.InnerClass dans = O.New InnerClass (); }} 2. Catégories internes locales
Une classe intérieure locale est comme une variable locale dans une méthode et ne peut pas avoir de modificateurs public , protected , private et static .
class OutterClass {public OutterClass (int in) {class InnerClass {// local inner class int Innernum = 1; }}} 3. Classes internes imbriquées
Les classes intérieures imbriquées sont des classes internes modifiées comme static . Une classe intérieure déclarée static ne nécessite pas de connexion entre l'objet de classe intérieure et l'objet de classe externe, c'est-à-dire que nous pouvons directement nous référer à outer.inner , c'est-à-dire que nous n'avons pas besoin de créer une classe extérieure ou une classe intérieure.
class OutterClass {public outerClass (int in) {} classe statique innerclass {// classe intérieure locale int internernum = 1; }} classe publique classe {public static void main () {OutterClass.innerClass dans = new OutterClass.innerClass (); }} 4. catégorie interne anonyme
Les classes internes anonymes sont celles que nous utilisons le plus parce que nous ne voulons pas leur donner des noms, nous avons donc l'anonymat. Les classes internes anonymes doivent être définies à l'avance.
btnsan.setOnclickListener (newOnClickListener () {@Override publicVoidOnClick (View v) {}}); 5. fermetures et rappels
Une fermeture est un objet qui peut être appelé, ce qui enregistre des informations sur la portée qui la crée. Java ne peut pas soutenir explicitement les fermetures, mais en Java, les fermetures peuvent être implémentées via "Interface + Class intérieure".
Par exemple: un programmeur d'interface et un écrivain de classe de base ont le même work de méthode et le même nom de méthode, mais sa signification est complètement différente. Pour le moment, une fermeture est requise.
classe écrivain {// Écrivain Base class void work () {};} Interface Programmer {// Programmer Interface void work ();} Le code d'implémentation de fermeture est le suivant:
classe publique WriterProgrammer élargit l'écrivain {@Override public void work () {// writing} public void code () {// write code} class ProgrammerInner implémente le programmeur {@Override public void work () {code (); }}} Dans la sous-classe, une classe interne qui suit les règles de l'interface du programmeur est définie, puis la classe interne implémente la méthode work() de la méthode de code() , et implémente directement work() de l'écrivain de classe parent dans la sous-classe.
6. Le rôle des catégories internes
Les classes internes peuvent être bien implémentées pour se cacher.
Généralement, les classes non internes ne permettent pas les autorisations private et protected , mais les classes internes peuvent
La classe intérieure a accès à tous les éléments de la classe périphérique
Mais un héritage multiple est atteint
Il peut éviter de modifier l'interface et d'implémenter les appels de deux méthodes du même nom dans la même classe.
7. Résumé
Ce qui précède est l'intégralité du contenu de cet article. J'espère que cela vous aidera à apprendre ou à utiliser Java. Si vous avez des questions, vous pouvez laisser un message pour communiquer.