Diferencia entre clase anidada estática y no estática en Java

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:

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();
    }
}
Producción

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();
    }
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *