Interfaces

O que é uma interface em Java?

Podemos pensar as interfaces como contratos.

Existem diversas situações na engenharia de software em que é importante que grupos distintos de programadores concordem com um "contrato" que defina como seus softwares interagem. Cada grupo deve ser capaz de escrever seu código sem qualquer conhecimento de como o código do outro grupo é escrito. Em Java, esse contrato pode ser produzido com interfaces.

Na linguagem de programação Java, a declaração de uma interface pode ser feita de forma semelhante a uma classe:

public interface OperateCar {

   // Declaração de constantes, se houver

   // Assinaturas de métodos

   // Um enum com valores RIGHT, LEFT
   int turn(Direction direction,
            double radius,
            double startSpeed,
            double endSpeed);
   int changeLanes(Direction direction,
                   double startSpeed,
                   double endSpeed);
   int signalTurn(Direction direction,
                  boolean signalOn);
   int getRadarFront(double distanceToCar,
                     double speedOfCar);
   int getRadarRear(double distanceToCar,
                    double speedOfCar);
         ......
   // Mais assinaturas de métodos
}

A interface, porém, só pode conter:

  • Constantes
  • Assinaturas de métodos:
    • Método sem corpo {}, com ponto e vírgula ao final das chaves de parâmetros ();
  • Métodos padrões
    • Métodos que terão a mesma implementação lógica nas classes.
  • Métodos estáticos (privados ou públicos, não protegidos)
  • Métodos não abstratos de instância (privados, não públicos, não protegidos)
  • Tipos aninhados.

Corpos de métodos existem apenas para métodos padrões, métodos privados e métodos estáticos.

Interfaces não podem ser instanciadas

  • Só podem ser implementadas por classes ou estendidas por outras interfaces.

Definindo uma interface

A declaração de uma interface deve conter os seguintes modificadores:

  • a palavra-chave interface
  • o nome da interface
  • uma lista separada por vírgulas de interfaces pai (se houver)
  • o corpo da interface.

Exemplo:

public interface GroupedInterface extends Interface1, Interface2, Interface3 {

    // declaração de constantes

    // base de logaritmos naturais
    double E = 2.718282;

    // assinatura de métodos
    void doSomething (int i, double x);
    int doSomethingElse(String s);
}
  • public
    • O especificador de acesso public indica que a interface pode ser usada por qualquer classe em qualquer pacote. Se você não especificar que a interface é pública, ela será acessível apenas às classes definidas no mesmo pacote que a interface.
  • Uma interface pode estender outras interfaces
    • Assim como uma classe. No entanto, enquanto uma classe pode estender apenas uma outra classe, uma interface pode estender qualquer número de interfaces. A declaração da interface inclui uma lista separada por vírgulas de todas as interfaces que ela estende.
  • O corpo da interface {} pode conter métodos abstratos, métodos padrões e métodos estáticos.
  • Os métodos padrão são definidos com o modificador default
  • Métodos estáticos com a palavra-chave static
  • Uma interface pode conter declarações constantes.

Todos os métodos abstratos, padrão e estáticos em uma interface são implicitamente públicos, portanto, nesses casos você pode omitir o modificador public.

Da mesma forma, como todos os valores constantes definidos em uma interface são implicitamente public, static, e final. Você pode omitir esses modificadores.

Documentação

Esse artigo tem como referência a seguinte documentação: Interfaces - Dev.java

Artigos relacionados

A interface comparator

0
Subscribe to my newsletter

Read articles from Lucas de Godoy Chicarelli directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Lucas de Godoy Chicarelli
Lucas de Godoy Chicarelli