publicinterfacePesado{doubleobterPeso();}publicinterfaceColorido{ColorobterCor();}publicclassPorcoextendsAnimalimplementsPesado,Colorido{publicvoidfazerBarulho(){System.out.println("Óinc!");}//Implementação da interface PesadopublicdoubleobterPeso(){return50.00;}//Implementação da interface ColoridopublicColorobterCor(){returnColor.BLACK;}//Um método só do porcopublicbooleanenlameado(){returntrue;}}
Qual é a vantagem de se usar essas duas interfaces nesse caso em particular?
O Porco é um Animal, o que significa que vc pode fazer
Porco p = new Porco();
Animal a = new Porco();
Agora, com estas interfaces vc também pode fazer
Pesado pe = new Porco();
Colorido co = new Porco();
As vantagens? veja esse exemplo:
public class Arca{
public double total;
public Arca(){
this.total = 0.0;
}
public add(Pesado coisaPesada){ this.total += coisaPesada.obterPeso(); }
public double getTotal() { return this.total; }
}
Pronto, agora vc pode colocar o que quiser nessa arca: animais, um piano, comida…
jgbt
Interfaces servem basicamente para definir um contrato que todas as classes que a implementam devem seguir.
De uma olhada na api de JDBC do Java, que é praticamenre toda baseda em interfaces.
A Sun definiu o contrato(interfaces) que classes que vão implemtar esse contrato deve seguir. Isso pq, por exemplo, quando vc criar uma uma conexão vc não quer se importar com qual banco vc conectou, mas sim que vc pode chamar metodos dessa conexão que retornaram algo que estaria no contrato.
tipo:
Connectioncon=// conexão para qualquer bancoStatementstm=con.createStatement();
o contrato da interface Connection diz que quem a implementou deveria implementar o metodo createStatement. Mas dependendo do banco, esse objeto Statement é criado de formas diferentes, mas para quem utiliza a interface Connection isso deve ser transparente.