Clase estática en Java

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. 

  1. Se puede instanciar una clase anidada estática sin instanciar su clase externa.
  2. 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();
    }
}
Producción

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

Deja una respuesta

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