Junior
Quais são os tipos de classes em Java?
sobes.tech IA
Resposta da IA
Em Java, existem os seguintes tipos principais de classes:
-
Classe padrão (Standard Class)
- Pode conter campos, métodos, construtores.
- Pode ser herdada por outras classes, se não for declarada como
final. - Pode implementar interfaces.
- Declarada com modificadores de acesso (
public,protected,default,private).
-
Classe abstrata (Abstract Class)
- Declarada com a palavra-chave
abstract. - Não pode ser instanciada diretamente.
- Pode conter métodos abstratos (sem implementação) e métodos normais.
- Destinada a ser herdada; as subclasses devem fornecer a implementação dos métodos abstratos.
// Classe abstrata para uma figura abstract class Shape { abstract double area(); // Método abstrato para calcular a área void display() { // Método normal System.out.println("This is a shape."); } } - Declarada com a palavra-chave
-
Classe final (Final Class)
- Declarada com a palavra-chave
final. - Não pode ser herdada por outras classes.
- Usada para prevenir a extensão da classe, garantir a segurança ou a imutabilidade da implementação.
// Classe final que não pode ser herdada final class ImmutableString { private final String value; public ImmutableString(String value) { this.value = value; } public String getValue() { return value; } } - Declarada com a palavra-chave
-
Enumerações (Enum)
- Um tipo especial de classe, destinado a representar um conjunto fixo de constantes.
- Declarado com a palavra-chave
enum. - As constantes da enumeração são
public static finalpor padrão. - Pode ter campos, métodos e construtores (com modificador
private).
// Enum para os dias da semana enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } -
Classes anônimas (Anonymous Class)
- Classe sem nome, criada e instanciada ao mesmo tempo.
- Geralmente usadas para implementar interfaces ou estender classes "on the fly", quando é necessária uma única utilização.
- Não podem ter construtores explícitos.
// Criando uma classe anônima que implementa Runnable Runnable r = new Runnable() { @Override public void run() { System.out.println("Running in an anonymous class."); } }; -
Classes internas (Nested Class)
- Classes declaradas dentro de outra classe.
- Existem dois tipos:
- Classes internas estáticas (Static Nested Class): declaradas com
static. Não têm acesso direto aos membros não estáticos da classe exterior. São instanciadas como classes normais. - Classes internas (Inner Class): não são declaradas como
static. Têm acesso a todos os membros da classe exterior, incluindoprivate. Requerem uma instância da classe exterior para criar sua instância.
- Classes internas estáticas (Static Nested Class): declaradas com
// Classe exterior class OuterClass { private String outerField = "Outer"; // Classe interna estática static class StaticNestedClass { void display() { System.out.println("Inside StaticNestedClass."); // Sem acesso direto a outerField } } // Classe interna class InnerClass { void display() { System.out.println("Inside InnerClass. outerField: " + outerField); // Acesso a outerField } } } -
Clases record (Record - desde Java 14)
- Declaradas com a palavra-chave
record. - Destinadas a armazenar dados. O compilador gera automaticamente o construtor, métodos de acesso aos campos (
accessor methods),equals(),hashCode()etoString(). - Os campos do record são implicitamente
final.
// Record para representar um ponto em um espaço 2D record Point(int x, int y) { // O compilador gerará o construtor, métodos x(), y(), equals(), hashCode(), toString() } - Declaradas com a palavra-chave