Sobes.tech
Junior

Quais são os tipos de classes em Java?

sobes.tech IA

Resposta da IA

  • Classes regulares (regular / concretas): Podem ser instanciadas, contêm campos, métodos, construtores.
  • Classes abstratas: Não podem ser instanciadas diretamente. Podem conter métodos abstratos (sem implementação) e métodos normais. São usadas para definir características comuns às subclasses.
    abstract class AbstractClass {
        abstract void abstractMethod(); // Método abstrato
        void regularMethod() {
            System.out.println("Método regular");
        }
    }
    
  • Classes aninhadas (nested classes): Declaradas dentro de outra classe. Podem ser:
    • Classes aninhadas estáticas (static nested classes): Não têm acesso aos membros não estáticos da classe exterior. São criadas sem uma instância da classe exterior.
      class OuterClass {
          static class StaticNestedClass {
              // ...
          }
      }
      
    • Classes internas (inner classes): Têm acesso a todos os membros da classe exterior (incluindo privados). Estão ligadas a uma instância da classe exterior.
      class OuterClass {
          class InnerClass {
              // Tem acesso aos membros de OuterClass
          }
      }
      
    • Classes locais (local classes): Declaradas dentro de um método, ciclo ou bloco if. O acesso a elas é limitado à sua área de declaração.
      class OuterClass {
          void someMethod() {
              class LocalClass {
                  // Declarada localmente
              }
              LocalClass obj = new LocalClass();
          }
      }
      
    • Classes anónimas (anonymous classes): Sem nome, criadas juntamente com a declaração ou instanciação. Usadas para uso único.
      interface MyInterface {
          void myMethod();
      }
      
      MyInterface anon = new MyInterface() {
          @Override
          public void myMethod() {
              System.out.println("Classe anónima");
          }
      };
      
  • Clases record (desde Java 14): Sintaxe compacta para declarar classes imutáveis destinadas ao armazenamento de dados (POJO).
    record Person(String name, int age) {
        // Construtor, getters, equals(), hashCode(), toString() gerados automaticamente
    }