Java permet de définir une classe au sein d'une autre classe. Ceux-ci sont appelés Classes imbriquées . Les classes peuvent être statiques, ce que la plupart des développeurs sont conscients, désormais certaines classes peuvent être rendues statiques en Java. Java prend en charge Variables d'instance statiques , Méthodes statiques , Bloc statique et classes statiques. La classe dans laquelle la classe imbriquée est définie est appelée Classe externe . Contrairement aux classes de haut niveau, Les classes imbriquées peuvent être statiques . Les classes imbriquées non statiques sont également appelées Classes intérieures .
Note: La classe de niveau supérieur ne peut pas être statique en Java, pour créer une classe statique, nous devons créer une classe imbriquée puis la rendre statique.
Une instance d’une classe interne ne peut pas être créée sans une instance de la classe externe. Par conséquent, une instance de classe interne peut accéder à tous les membres de sa classe externe, sans utiliser de référence à l’instance de classe externe. Pour cette raison, les classes internes peuvent contribuer à rendre les programmes simples et concis.
Souviens-toi: En classe statique, nous pouvons facilement créer des objets.
Différences entre les classes imbriquées statiques et non statiques
Voici les principales différences entre les classes imbriquées statiques et les classes internes.
- Une classe imbriquée statique peut être instanciée sans instancier sa classe externe.
- Les classes internes peuvent accéder aux membres statiques et non statiques de la classe externe. Une classe statique ne peut accéder qu'aux membres statiques de la classe externe.
Exemple de Classes imbriquées statiques et non statiques
Vous trouverez ci-dessous la mise en œuvre du sujet mentionné ci-dessus :
Java
// Java program to Demonstrate How to> // Implement Static and Non-static Classes> // Class 1> // Helper class> class> OuterClass {> > // Input string> > private> static> String msg => 'GeeksForGeeks'> ;> > // Static nested class> > public> static> class> NestedStaticClass {> > // Only static members of Outer class> > // is directly accessible in nested> > // static class> > public> void> printMessage()> > {> > // Try making 'message' a non-static> > // variable, there will be compiler error> > System.out.println(> > 'Message from nested static class: '> + msg);> > }> > }> > // Non-static nested class -> > // also called Inner class> > public> class> InnerClass {> > // Both static and non-static members> > // of Outer class are accessible in> > // this Inner class> > public> void> display()> > {> > // Print statement whenever this method is> > // called> > System.out.println(> > 'Message from non-static nested class: '> > + msg);> > }> > }> }> // Class 2> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String args[])> > {> > // Creating instance of nested Static class> > // inside main() method> > OuterClass.NestedStaticClass printer> > => new> OuterClass.NestedStaticClass();> > // Calling non-static method of nested> > // static class> > printer.printMessage();> > // Note: In order to create instance of Inner class> > // we need an Outer class instance> > // Creating Outer class instance for creating> > // non-static nested class> > OuterClass outer => new> OuterClass();> > OuterClass.InnerClass inner> > = outer.> new> InnerClass();> > // Calling non-static method of Inner class> > inner.display();> > // We can also combine above steps in one> > // step to create instance of Inner class> > OuterClass.InnerClass innerObject> > => new> OuterClass().> new> InnerClass();> > // Similarly calling inner class defined method> > innerObject.display();> > }> }> |
>
>Sortir
Message from nested static class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks>