Las clases anidadas se dividen en dos categorías, a saber, estáticas y no estáticas . Las clases anidadas que se declaran estáticas se denominan clases anidadas estáticas. Las clases anidadas no estáticas se denominan clases internas.
Una clase puede ser estática o no estática en Java. Entonces, hay mucha diferencia entre hacer que una clase sea estática o no estática. Hay dos tipos de clases en Java, una se llama clase de nivel superior y la otra se llama clase anidada. Como sugiere el nombre, la clase de nivel superior es una clase que se declara en el archivo ‘ .java’ .
Por otro lado, una clase anidada se declara dentro de otra clase. La clase que encerraba la clase anidada se conoce como clase externa. En el lenguaje de programación Java, no puede hacer que una clase de nivel superior sea estática. Solo puede hacer que las clases anidadas sean estáticas o no estáticas. Si hace que una clase anidada no sea estática, también se denomina clase interna.
Casos de usuario:
- Clase anidada estática
- Clase anidada no estática
Ejemplo 1: clase anidada estática
Java
// Java Program to illustrate // static nested class // Importing input output classes import java.io.*; // Importing all classes from // java.util package import java.util.*; // Class 1 // Helper class1 class ClassA { // Static variable static int x = 10; int y = 20; // Static variable with private // access modifier in ClassA private static int z = 30; // Class 2 - Nested static class // Helper Class 2 static class ClassB { // Method of nested static class void get() { // Execution statements whenever // function is called // Print and display commands System.out.println("x: " + x); System.out.println("z: " + z); } } } // Class 3 // Main Class class GFG { // Main driver method public static void main(String[] args) { // Creating an object of static nested class // defined outside Main class ClassA.ClassB ob1 = new ClassA.ClassB(); // Calling the method of static nested class // in main() method ob1.get(); } }
x: 10 z: 30
Ejemplo 2: clase anidada no estática
Java
// Importing all input output classes import java.io.*; // Class 1 // Helper Class 1 class ClassA { // Static member variable of ClassA static int x = 10; int y = 20; public int z = 30; // Class 2 - Helper Class 2 // Non-static nested class class ClassB { // Method of Non-static nested class void get() { // Execution command of get() method // Print and display commands System.out.println("x: " + x); System.out.println("y: " + y); System.out.println("z: " + z); } } } // Class 3 // Main Class class GFG { // Main driver method public static void main(String[] args) { // Creating object of Class 1 in main() method ClassA ob1 = new ClassA(); // Creating object of non-static nested class in // main() ClassA.ClassB ob2 = ob1.new ClassB(); // Calling non-static nested class method // in main() method ob2.get(); } }
x: 10 y: 20 z: 30
Ahora la diferencia entre la clase anidada estática y no estática en Java:
- La clase interna estática puede acceder directamente a los miembros estáticos de la clase externa. Pero, para acceder a los miembros de la instancia de la clase externa, debe crear una instancia de la clase externa.
- La clase estática anidada no necesita una referencia de clase externa, pero una clase anidada no estática o una clase interna requiere una referencia de clase externa.
- Una clase anidada no estática tiene acceso total a los miembros de la clase en la que está anidada. Una clase anidada estática no tiene una referencia a una instancia anidada, por lo que una clase anidada estática no puede invocar métodos no estáticos ni acceder a campos no estáticos de una instancia de la clase en la que está anidada.
- Otra diferencia entre la clase anidada estática y no estática es que no puede acceder directamente a los miembros no estáticos, por ejemplo, al método y al campo en la clase estática anidada. Si lo hace, obtendrá errores como «el miembro no estático no se puede usar en el contexto estático». Mientras que la clase interna puede acceder a miembros estáticos y no estáticos de la clase externa.
Publicación traducida automáticamente
Artículo escrito por kaaruni1124 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA