Classe interne java
1. Qu'est-ce qu'une catégorie interne?
La définition d'une classe est placée dans une autre classe, et cette classe est appelée une classe interne
2. Quelles sont les caractéristiques des classes internes?
1. La classe intérieure est toujours une classe indépendante. Après compilation, la classe intérieure sera compilée dans un fichier .class indépendant, mais il est précédé par le nom de classe et le symbole $ de la classe extérieure.
2. Les classes internes ne sont pas accessibles de manière ordinaire. La classe intérieure est membre de la classe extérieure, de sorte que la classe intérieure peut accéder librement aux variables membres de la classe extérieure, que ce soit privé ou non.
3. Si la classe interne est déclarée statique, elle ne peut pas accéder aux variables membres de la classe externe à volonté. À l'heure actuelle, la classe interne ne peut accéder qu'aux variables membre statiques de la classe externe.
3. Quelles sont les catégories internes?
1. Classe interne membre
comme:
package com.test01; classe publique A {// La classe B intérieure B hérite de testpojo et implémente l'interface TesInterface La classe B étend TestPojo implémente TestingInterface {// Inner Class B's Propre méthode public void run () {System.out.println ("Je suis en cours d'exécution!"); } // Réécrivez la méthode d'interface public void testf () {System.out.println ("Implémentez l'interface!"); }} // appelle la classe interne public void test () {b b = new b (); B.Testf (); // utilise la méthode d'interface de réécriture b.run (); // Appelez votre propre méthode b.testpojo (); // Méthode d'appel héritant de la classe parent} // Méthode principale test public static void main (String [] args) {a a = new a (); a.test (); }} // Définir une interface, la méthode est TestF () Interface TestInterface {public void testf ();} // définir une méthode de classe normale TestPojo () class TestPojo {public void testpojo () {System.out.println ("I Am a simple POJO class"); }} // implémenter pour appeler les méthodes de la classe de classe intérieure textone {public static void main (String [] args) {ab b = new a (). New b (); // Appel de la classe B intérieure dans la classe A / ** équivaut au code suivant * a a = new a (); * Ab b = a.new b (); * * / b.Testf (); // utilise la méthode d'interface de réécriture b.run (); // appelez votre propre méthode b.testpojo (); // appelle la méthode qui hérite de la classe parent}}2. Méthode Classe interne
package com.Test01; public class perforts {public void test () {// définir une méthode class ne {// définir une méthode classe interne public void fle () {// définir une méthode de classe interne System.out.println ("Je suis en train de voler!"); }}; Nouveau NE (). Fle (); // Appel de la méthode de la classe intérieure} public static void main (String [] args) {new PerstEst (). Test (); //Test}} Remarque: (1) La classe interne de la méthode ne peut être instanciée que dans la méthode qui définit la classe interne et ne peut pas être instanciée en dehors de cette méthode.
(2) L'objet de classe interne de la méthode ne peut pas utiliser les variables locales non finales de la méthode où se trouve la classe intérieure.
Parce que les variables locales de la méthode sont sur la pile, elles n'existent que pendant la durée de vie de la méthode. Lorsqu'une méthode se termine, sa structure de pile est supprimée.
Les variables locales deviennent l'histoire. Cependant, une fois la méthode terminée, les objets de classe intérieure créés dans la méthode peuvent toujours exister dans le tas!
Par exemple, si une référence est transmise à un autre code et est stockée dans une variable de membre. Parce que les variables locales ne peuvent pas être garanties d'avoir la même longue durée de vie que celles des objets de classe interne de méthode, les objets de classe interne ne peuvent pas les utiliser. (Cette compréhension vient de Baidu Encyclopedia)
3. Classe interne anonyme
1) Résumé des classes internes anonymes
package com.anonymous; public class abstractClass {public void test () {// La méthode est testa testa a = new testa () {// implémenter une classe abstraite @Override public void run () {// implémenter une classe abstraite System.out.println ("J'utilise Abstract Anonymous Inner class"); }}; a.run (); // appelant la méthode de la classe intérieure} public static void main (String [] args) {new AbstractClass (). Test (); // test}} // Définir une classe abstraite Testa Résumé La méthode est exécutée () Résumé Classe testa {public abstract void run ();}2) Interface Classe interne anonyme
package com.anonymous; classe publique testanonymous {myInterface m = new myInterface () {// implémenter l'interface public void Eat () {// réécriture de la méthode d'interface myInterface System.out.println ("Je prends un repas!"); }}; public void ss () {// méthode ss m.eat (); // appelle la méthode écrasée} public static void main (String [] args) {new Testanonymous (). Ss (); // test}} // définir une méthode d'interface comme EatInterface MyInterface {public void Eat ();}Remarque: les classes intérieures anonymes peuvent être définies dans les méthodes ou dans les membres de la classe. Peu importe les classes intérieures anonymes, ils ne peuvent pas être appelés directement par des classes externes.
4. Quel est le rôle des catégories internes?
Chaque classe interne peut hériter indépendamment d'une implémentation (interface), de sorte que la classe périphérique a hérité d'une certaine implémentation (interface) n'a aucun effet sur la classe interne. Sans la capacité fournie par les classes internes pour hériter de plusieurs classes en béton ou abstraites, certains problèmes de conception et de programmation sont difficiles à résoudre. De ce point de vue, les classes internes rendent complet la solution de l'héritage multiple.
Les interfaces résolvent certains problèmes, tandis que les classes internes implémentent efficacement "l'héritage multiple".
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!