Java permite definirea unei clase în cadrul unei alte clase. Acestea sunt numite Clase imbricate . Clasele pot fi statice, ceea ce majoritatea dezvoltatorilor sunt conștienți, de acum înainte unele clase pot fi făcute statice în Java. Java suportă Variabile de instanță statică , Metode statice , Bloc static , și clase statice. Clasa în care este definită clasa imbricată este cunoscută ca Clasa exterioară . Spre deosebire de clasele de nivel superior, Clasele imbricate pot fi statice . Clasele imbricate non-statice sunt cunoscute și ca Clasele interioare .
Notă: Clasa de nivel superior nu poate fi statică în java, pentru a crea o clasă statică trebuie să creăm o clasă imbricată și apoi să o facem statică.
O instanță a unei clase interioare nu poate fi creată fără o instanță a clasei exterioare. Prin urmare, o instanță de clasă interioară poate accesa toți membrii clasei sale exterioare, fără a utiliza o referință la instanța de clasă exterioară. Din acest motiv, clasele interne pot ajuta la realizarea programelor simple și concise.
Tine minte: În clasa statică, putem crea cu ușurință obiecte.
Diferențele dintre clasele imbricate statice și non-statice
Următoarele sunt diferențe majore între clasele imbricate statice și clasele interioare.
- O clasă imbricată statică poate fi instanțiată fără a instanția clasa sa exterioară.
- Clasele interioare pot accesa atât membrii statici, cât și nestatici ai clasei exterioare. O clasă statică poate accesa numai membrii statici ai clasei exterioare.
Exemplu de Clase imbricate statice și non-statice
Mai jos este implementarea subiectului menționat mai sus:
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();> > }> }> |
>
>Ieșire
Message from nested static class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks>