Java permite definir una clase dentro de otra clase. Estas se llaman clases anidadas . Las clases pueden ser estáticas, algo que la mayoría de los desarrolladores conocen; en adelante, algunas clases pueden volverse estáticas en Java. Java admite variables de instancias estáticas , métodos estáticos , bloques estáticos y clases estáticas. La clase en la que se define la clase anidada se conoce como clase externa . A diferencia de las clases de nivel superior, las clases internas pueden ser estáticas . Las clases anidadas no estáticas también se conocen como clases internas .
No se puede crear una instancia de una clase interna sin una instancia de la clase externa. Por lo tanto, una instancia de clase interna puede acceder a todos los miembros de su clase externa, sin utilizar una referencia a la instancia de clase externa. Por esta razón, las clases internas pueden ayudar a que los programas sean simples y concisos.
Recuerde: en la clase estática, podemos crear objetos fácilmente.
Diferencias entre clases anidadas estáticas y no estáticas
Las siguientes son las principales diferencias entre las clases anidadas estáticas y las clases internas.
- Se puede instanciar una clase anidada estática sin instanciar su clase externa.
- Las clases internas pueden acceder a miembros estáticos y no estáticos de la clase externa. Una clase estática solo puede acceder a los miembros estáticos de la clase externa.
Ejemplo
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(); } }
Message from nested static class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks
Este artículo es una contribución de Chandra Prakash . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA