11.8. Estrutura de Classes e Objetos em Java: Interfaces

Em Java, a programação orientada a objetos é um paradigma fundamental, e o entendimento de classes e objetos é essencial para qualquer desenvolvedor. Uma classe é uma estrutura que define o estado e o comportamento de um objeto, enquanto um objeto é uma instância de uma classe. Dentro deste contexto, as interfaces desempenham um papel crucial ao definir um contrato que as classes podem implementar, permitindo assim um alto nível de abstração e flexibilidade no design de software.

O que são Interfaces em Java?

Uma interface em Java é uma referência de tipo, similar a uma classe, que pode conter constantes, métodos abstratos, métodos default, métodos estáticos e métodos privados. Ela é um mecanismo que permite a abstração total, fornecendo um conjunto de métodos que uma classe deve implementar, sem fornecer uma implementação. Interfaces são declaradas usando a palavra-chave interface, e uma classe que implementa uma interface deve fornecer implementações concretas para todos os seus métodos abstratos.


public interface Vehicle {
    void start();
    void stop();
    double getFuelCapacity();
}

Implementando Interfaces

Quando uma classe implementa uma interface, ela deve fornecer implementações para todos os métodos abstratos declarados na interface. A palavra-chave implements é usada na declaração da classe para especificar que a classe está implementando uma interface.


public class Car implements Vehicle {
    private double fuelCapacity;

    public Car(double fuelCapacity) {
        this.fuelCapacity = fuelCapacity;
    }

    @Override
    public void start() {
        System.out.println("Car started.");
    }

    @Override
    public void stop() {
        System.out.println("Car stopped.");
    }

    @Override
    public double getFuelCapacity() {
        return fuelCapacity;
    }
}

Uma classe pode implementar várias interfaces, separando-as com uma vírgula, o que é uma maneira de Java suportar a herança múltipla de tipo.

Vantagens do Uso de Interfaces

Interfaces são poderosas ferramentas de design de software por várias razões:

  • Abstração: Interfaces permitem que você defina um contrato que especifica o que uma classe deve fazer, sem se preocupar com o como. Isso promove um design de software mais limpo e modular.
  • Desacoplamento: Como as interfaces são abstrações, elas ajudam a desacoplar o código, facilitando a manutenção e a escalabilidade.
  • Polimorfismo: Interfaces são um meio de alcançar polimorfismo em Java, permitindo que objetos de diferentes classes sejam tratados de forma uniforme.
  • Flexibilidade: Interfaces permitem que você mude a implementação de uma classe sem alterar o código que usa a interface, o que é uma vantagem significativa para a manutenção de código a longo prazo.

Métodos Default e Métodos Estáticos

Java 8 introduziu métodos default e métodos estáticos em interfaces. Métodos default têm uma implementação padrão e não são obrigatórios para serem sobreescritos pelas classes que implementam a interface. Isso permite que novos métodos sejam adicionados a interfaces existentes sem quebrar as classes que as implementam.


public interface Vehicle {
    void start();
    void stop();
    double getFuelCapacity();

    default void turnAlarmOn() {
        System.out.println("Turning the vehicle alarm on.");
    }

    default void turnAlarmOff() {
        System.out.println("Turning the vehicle alarm off.");
    }
}

Métodos estáticos, por outro lado, são métodos que pertencem à interface e não à instância de uma classe que a implementa. Eles podem ser chamados diretamente na interface.


public interface Vehicle {
    static String getVehicleType() {
        return "Unknown";
    }
}

Interfaces Funcionais e Expressões Lambda

Java 8 também introduziu o conceito de interfaces funcionais, que são interfaces que contêm apenas um único método abstrato. Elas são usadas como base para expressões lambda e referências de métodos, permitindo uma sintaxe sucinta e funcional para passar comportamento como argumento.


@FunctionalInterface
public interface SimpleFunction {
    void execute();
}

// Uso de uma expressão lambda
SimpleFunction function = () -> System.out.println("Hello, World!");
function.execute();

Considerações ao Usar Interfaces

Ao projetar seu software, é importante considerar quando e como usar interfaces. Elas são mais úteis quando você tem várias classes que devem seguir o mesmo contrato ou quando você deseja definir um papel que pode ser desempenhado por objetos de diferentes classes. No entanto, interfaces não devem ser usadas indiscriminadamente. Se uma interface não está adicionando valor ao design do seu software, repense sua utilização.

Em resumo, interfaces em Java são uma ferramenta poderosa que oferece flexibilidade, abstração e polimorfismo ao design de software orientado a objetos. Elas permitem que os desenvolvedores criem sistemas que são fáceis de manter e estender, promovendo práticas de codificação robustas e escaláveis.

Agora responda o exercício sobre o conteúdo:

_Qual das seguintes afirmações é verdadeira sobre as interfaces em Java?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Estrutura de classes e objetos em Java: Classes Abstratas

Próxima página do Ebook Gratuito:

67Estrutura de classes e objetos em Java: Classes Abstratas

4 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto