Certificação SCJP – Interfaces – Post 005

Enquanto as classes definem especificações e implementações de métodos, as interfaces definem somente dados constantes e métodos (apenas assinaturas).

O termo contrato é bastante utilizado para se definir as características de uma interface, pois, toda classe que implemente uma interface DEVE (por contrato) implementar todos os seus métodos. Sendo assim a interface define o que a classe deve fazer (mas não como deve ser feito).

Qualquer interface pode ser implementada por uma classe, independentemente da arvore de herança em que se encontram. Porem algumas regras devem ser seguidas.

Regras:

  • Todas as “variáveis” definidas em uma interface DEVEM ser public, static e final – sendo assim interfaces só possuem constantes e não variáveis;
  • Todos os métodos de uma interface são implicitamente public e abstract;
  • Os métodos de uma interface não podem ser static;
  • Uma vez que os métodos de uma interface são abstracts, não podem ser marcados como final, native, strictfp ou synchronized;
  • Uma interface pode estender uma ou mais interfaces diferentes;
  • Uma interface não pode estender nada que não seja uma interface;
  • Uma interface não pode implementar uma outra interface ou classe;
  • Uma interface deve ser declarada com a palavra reservada interface;
  • Uma interface pode possuir acesso publico ou default, mas nunca private;
  • Os tipos de interfaces podem ser usados polimorficamente. Isso quer dizer que na OO o conceito É UM é baseado na herança de classes ou implementações de interfaces. O relacionamento É UM em Java pode ser expresso por meio das palavras chave extends (para herança de classes) e implements (para implementação de interfaces);

Exemplo de código:

Veja no código acima que o modificador abstract foi incluso na declaração da interface – linha 3, porem não é necessário, já que as interfaces são implicitamente abstract. O código abaixo também seria valido e são considerados exatamente equivalentes:

O mesmo também ocorre para os métodos e variáveis declaradas na interface acima vejam os comentários.

O código acima representa uma classe chamada MinhaClasse (desculpe me pela falta de criatividade =]) que implementa a interface MinhaInterface – linha 3.

Todos os métodos declarados na interface MinhaInterface são implementados obrigatoriamente – linhas 10-12.

Esta classe também possui uma versão sobrecarregada do método metodo3() – linha 17.

Note também que a classe faz uso da constante STR1 no método metodo3(), sem nenhum problema. Isso ocorre porque, ao colocar constantes diretamente na interface, qualquer classe que implementar a interface terá acesso direto a suas constantes, como se as tivesse herdado. Lembre-se que não é possível alterar o valor de constantes!

Obs.: O termo implícito no contexto significa que mesmo que um modificador não seja declarado pelo programador, o Java o insere.

[]’s

Att

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s