ae pessoal estou estudando polimorfismo pelo deitel cap 8 sexta edição e me confudi no finalzinho… no inicio ele usa o polimorfismo usando o conceito de herança e tudo mais no final ele vem com o recurso de interface gostaria de saber qual a funcionalidade ele n foi claro… algo que ja reparei no deitel que a medida q ele avança o assunto ele n eh claro se enrola pra explicar… alguem pode me dizer qual a vantagem de usar a interface e pq usa-la n conseguir abstrair essa ideia de polimorfismo com interface 
Interface pq?
10 Respostas
Este artigo deve lhe ajudar:
http://www.guj.com.br/java.tutorial.artigo.123.1.guj
Mas falando em linhas gerais, vc utiliza uma interface para definir a “assinatura” de um método.
Por exemplo:
public InterfaceBuscaCarro{
public Carro buscaCarroPorPlaca(String placa);
}
Isto é uma interface e define apenas a assinatura do método. Alguma classe terá que implementar esta interface e escrever o código.
A implementação pouco lhe interessa, a busca pode ser feita em um arquivo texto, banco de dados ou outro lugar. O importante é que ela retorne um Carro.
No seu código vc vai sempre trabalhar com a interface InterfaceBuscaCarro, nunca com a classe que a implementa. Isto deixa seu código muito mais limpo, claro e desacoplado, uma vez não importa como o método buscaCarro foi implementado, blz?
Usando uma interface vc pode abstrair a implementação que será usada em tempo de execução.
Por exemplo eu crio uma interface pessoa e defino que ele vai responder as mesangens getProfissao();
Agora crio duas classes concretas que implemente pessoa. Professor e Policial em cada uma dessas classes deve haver uma implementação de getProfissao();
de forma simples poderia ficar assim:
public interface Pessoa{
public String getProfissao();
}
public class Professor implements Pessoa{
public String getProfissao(){
return "Professor";
}
}
public class Policial implements Pessoa{
public String getProfissao(){
return "Policial";
}
}
Agora vamos criar um main para ver o polimorfismo funcionar:
public class Policial{
public static void main(String[] args){
/*var do tipo da interface para poder receber tanto
policla como um professor um */
Pessoa p = null;
/* a var p ta recebendo um professor com o
polimorfismo o getProfissao() chamado vai
ser o da class professor */
p = new Professor();
System.out.println(p.getProfissao());
/* agora o mesmo p ta recebendo um policial e o
getProfissao() chamado é o de policial */
p = new Policial();
System.out.println(p.getProfissao());
}
}
Esse é um exemplo bem simples.
Uma interface é uma class totalmente abstrata que é o supertipo de objetos que recebem mensagens comuns.
Quando vc tiver mais na frente vai ver grandes vantagens nisso.
Valeu espero ter ajudado
nilolima, ótimo exemplo. Mas faltou fazer Professor implements Pessoa" 
valeu vou corrigir agora
po galera valeu ai, pelas dicas, como to ocmeçando agora, deu pra entender legal o funcionamento… entao assim qdo quero criar algo no geral… uso interface… é como os programas que a galera desenvolve em cobol, vb etc… que serve tanto para famarcia qto para padaria… apenas existe uma adaptação… ao sistema…para atender a determinado cliente… o que eu fiquei mais confuso eh a diferença entre polimorfismo… com herança e interface n sao os mesmo?
O conceito de polimorfismo tanto com herança como com interface é o mesmo.
O método que será chamado será sempre o da classe que a var refência em tempo de execução.
Outra coisa importante para se lembrar é… não existe herança múltipla no Java (e, na minha opinião, não deveria existir mesmo, senão suas classes viram uma zona), porém, uma classe pode implementar quantas interfaces forem necessárias. Isso é uma diferença e pode te ajudar em alguns casos.
A interface serve simplesmente como um contrato para que os outros componentes do seu sistema possam abstrair a implementação, se atendo apenas à estrutura da classe. Na herança, como o próprio nome diz, você herda comportamentos da classe pai. Existe ainda uma outra possibilidade que seria utilizar uma classe abstrata, que nada mais é, na prática, do que a combinação das duas.
Abraço,
Armando
class Animal{
...
public void morrer() {
System.out.println("Funções cerebrais encerradas...");
}
}
class Cao extends Animal{
...
public void morrer() {
System.out.print("CAIN-NHAIN! ");
super.morrer();
}
}
class Galinha extends Animal{
...
public void morrer() {
System.out.print("Có-cóóóóóóóó... ");
super.morrer();
}
}
class TesteSemPolimorfismo{
public static void main(String[] args) {
Animal animal;
Cao cao;
Galinha galinha;
System.out.println("Criando e matando um animal:");
animal = new Animal();
animal.morrer();
System.out.println();
System.out.println("Criando e matando um cão:");
cao = new Cao();
cao.morrer();
System.out.println();
System.out.println("Criando e matando uma galinha:");
galinha = new Galinha();
galinha.morrer();
System.out.println();
}
}
Criando e matando um animal
Funções cerebrais encerradas...
Criando e matando um cão
Có-cóóóóóóóó... Funções cerebrais encerradas...
Criando e matando uma galinha
CAIN-NHAIN! Funções cerebrais encerradas...
01 class TesteComPolimorfismo{
02 public static void main(String[] args) {
03 Animal animal;
04
05 System.out.println("Criando e matando um animal:");
06 animal = new Animal();
07 animal.morrer();
08 System.out.println();
09
10 System.out.println("Criando e matando um cão:");
11 animal = new Cao();
12 animal.morrer();
13 System.out.println();
14
15 System.out.println("Criando e matando uma galinha:");
16 animal = new Galinha();
17 animal.morrer();
18 System.out.println();
19 }
20 }
Criando e matando um animal
Funções cerebrais encerradas...
Criando e matando um cão
Funções cerebrais encerradas...
Criando e matando uma galinha
Funções cerebrais encerradas...
Pq o cão cacareja e a galinha late?
Por que eu sou desatento demais… só por isso!!! :lol:
Vou arrumar. Desculpem pessoal, e valeu bzy!!! :thumbup: