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.
- O especificador de acesso
- 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
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
