Sobes.tech
Junior

¿Qué tipos de clases existen en Java?

sobes.tech AI

Respuesta de la IA

  • Clases regulares (regular / concretas): Pueden ser instanciadas, contienen campos, métodos, constructores.
  • Clases abstractas: No pueden ser instanciadas directamente. Pueden contener métodos abstractos (sin implementación) y métodos normales. Se utilizan para definir características comunes para las subclases.
    abstract class AbstractClass {
        abstract void abstractMethod(); // Método abstracto
        void regularMethod() {
            System.out.println("Método regular");
        }
    }
    
  • Clases anidadas (nested classes): Se declaran dentro de otra clase. Pueden ser:
    • Clases anidadas estáticas (static nested classes): No tienen acceso a los miembros no estáticos de la clase exterior. Se crean sin una instancia de la clase exterior.
      class OuterClass {
          static class StaticNestedClass {
              // ...
          }
      }
      
    • Clases internas (inner classes): Tienen acceso a todos los miembros de la clase exterior (incluidos los privados). Están vinculadas a una instancia de la clase exterior.
      class OuterClass {
          class InnerClass {
              // Tiene acceso a los miembros de OuterClass
          }
      }
      
    • Clases locales (local classes): Se declaran dentro de un método, ciclo o bloque if. Su acceso está limitado a su ámbito.
      class OuterClass {
          void someMethod() {
              class LocalClass {
                  // Declarada localmente
              }
              LocalClass obj = new LocalClass();
          }
      }
      
    • Clases anónimas (anonymous classes): Sin nombre, se crean junto con la declaración o instanciación. Se usan para uso único.
      interface MyInterface {
          void myMethod();
      }
      
      MyInterface anon = new MyInterface() {
          @Override
          public void myMethod() {
              System.out.println("Clase anónima");
          }
      };
      
  • Clases record (desde Java 14): Sintaxis compacta para declarar clases inmutables destinadas a almacenar datos (POJO).
    record Person(String name, int age) {
        // Constructor, getters, equals(), hashCode(), toString() generados automáticamente
    }