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"); } };
- 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.
- 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 }