Ver a Bani respondendo sobre interfaces eh a mesma coisa que ver o Bill Gates respondendo sobre Linux :mrgreen:
Bom, para exemplificar o que ela quis dizer,
interface Command
{
public void execute();
}
class ClasseUm implements Command
{
public void execute()
{
System.out.println("ClasseUm");
}
}
class ClasseDois implements Command
{
public void execute()
{
System.out.println("ClasseDois");
}
}
Note que temos 2 classes que implementam a interface Command. No caso, a
interface é útil para dizer é esperado que as classes que lhe implementarem tal
interface definam o corpo do método ( ou métodos ).
Entao é possível fazer um codigo mais generico e independente, como foi dito no
exemplo de Servlets. Entao poderiamos fazer
...
Command c = new ClasseUm();
c.execute();
c = new ClasseDois();
c.execute();
...
O resultado será “ClasseUm” e logo abaixo “ClasseDois”. Isso funciona porque
ambas classes implementaram a interface.
Mas ai voce poderia perguntar: e por que nao fazer uma classe abstrata? bem,
voce pode fazer sim, porem lembre-se que em Java voce somente pode extender uma
unica classe por vez, entao nao da para sair criando classes para tudo.
Muita coisa vai do ponto de analise do projeto, isso interfere muito na decisao
de usar interfaces.
Um bom candidato a interface eh quando voce notar que varias classes definem um mesmo metodo em comum, porem com implementacoes diferentes em cada uma ( por exemplo, voce tem uma fabrica de carros, onde voce monta diferentes tipos de carros, mas ha varias coisas em comum, como o metodo andar(), freiar() etc… ).
Apesar de voce poder fazer tudo sem interfaces ( e mesmo sem classes abstratas ), o correto em termos de design da aplicacao seria ter uma interface com os metodos andar() e freiar(), e entao implementar o metodo em cada tipo de “Carro”. Dessa maneira, fica tudo mais logico, simples e portavel na aplicacao.
Rafael