POLIMORFISMO - Exemplos

[size=“24”][color=“red”] Aí galera… sou novo neste mundo chamado JAVA. Portanto eu gostaria de receber ajuda. A primeira delas é o seguinte: expliquem me, com a maior clareza possível, o que é polimorfismo e por favor, coloquem um trecho de código fonte exemplificando tal conceito.

Desde já agradeço a atenção!

Spider[/color][/size]

dá uma olhada neste tutorial …

http://www.portaljava.com.br/home/modules.php?name=Content&pa=showpage&pid=85

flw!

Valeu rcmsj

Dei uma lida no tutorial, mas pelo fato de eu ser ainda muuuuito calouro no assunto eu me perdi nas explicações (e olha que eu li uma, duas, três, quatro vezes seguidas…). Se você tiver um exemplo ainda mais simplório, poste-o aqui no forum beleza?

Mas de qualquer maneira, valeu mesmo pelo ajuda!

Spider

antes de tu querer saber a usar poliformismo, tu tem q estar confiante q conhece orientação ao objeto… se não for o caso, procure material sobre OO, q poliformismo será muito simples de saber depois… :slight_smile:

Bom dia Matheus

Na verdade, todos os conceitos de OO estão bem “frescos” na minha cabeça (herança, encapsulamento, polimorfismo etc etc etc), mas eu cansei de ficar só na teoria… Por isso peço aos amigos que postem pequenos (pequenos mesmo) trechos de código e expliquem passo-a-passo o que está acontecendo ao longo do mesmo.

Abraços

Spider

bem, se vc conhece OO, vai entender esse código, é um exemplo de poliformismo, onde eu chamo métodos com implementações diferentes de outros objetos na mesma referência:

interface Foo {

   public void doStuff();
}
class A implements Foo {

   public void doStuff() {

      System.out.println( "A" );
   }
}
class B implements Foo {

   public void doStuff() {

      System.out.println( "B" );
   }
}
class Test {

   public static void main( String args[] ) {

      Foo f[] = new Foo[2];

      f[0] = new A();
      f[1] = new B();

      for ( int i = 0; i < f.length; i++ )
         f[i].doStuff();
   }
}

Hummmm… agora está ficando mais claro. Como estou sem a JVM instalada aqui no meu computador não terei como executar este código imediatamente no meu computador, mas assim que chegar em casa farei a execução.

… mas pelo que eu entendi existem comportamentos diferentes para a implementação de um mesmo método através da implementação de uma interface, certo? Se eu estiver errado por favor me corrijam…

Abraços e mais uma vez muito obrigado Matheus

PS. Matheus, sabendo que você entende de Java, te incomodarei bastante daqui pra frente beleza??

certo, é isso mesmo… o método terá uma implementação diferente em diferentes objetos… é um exemplo de poliformismo…

ps: Come on, o Portal Java tem quase 18.000 usuários q entendem de java!!! :lol:

Aí Matheus… sem querer fugir do assunto do tópico, mas já fugindo, como é que faço para colocar um avatar diferente dos avatares disponíveis pelo próprio site??

na página do fórum, clique em Perfil, no final do formulário q vai aparecer terá um input text pra vc colocar a URL q vai ser exibido o teu avatar… a opção de upload não sei se esta funcionando, então tu precisa colocar ele em um server qualquer e linkar aqui

matheus

Andei analisando e pesquisando mais sobre o assunto POLIMORFISMO, e percebi que a galera o confunde muito com sobrecarga de métodos. Por favor me responde uma coisa: para se implementar o uso do conceito POLIMORFISMO, precisamos necessariamente de fazer o uso de uma interface? (no se exemplo, você usou a interface “Foo”)??

Grato, Spider

Não necessariamente, mas precisa ter uma relação de herança. A outra possibilidade é com superclasses e subclasses.[/code]

… mas espera aí: no exemplo citado pelo Matheus, não houve uma relação de herança… Houve sim uma implementação de interfaces (como eu já havia dito). Pode me explicar (e exemplificar com algum trecho de código)??

Abraços!

bem, ocorre q, qnd uma classe A extends uma classe B, uma instancia de A pode ser atribuida a uma referência de B. O mesmo ocorre se B fosse uma interface, onde uma classe A implements uma interface B, e uma instancia de A pode ser atribuída a uma referência de B. :joia:

matheus nao entendi o que vc fez


Foo f[] = new Foo[2];

Foo é uma interface vc não consegue criar uma instancia de interface acho que o que poderia fazer é


 Foo f = new B();
 Foo f2 =  new A();

[quote=“lula”]matheus nao entendi o que vc fez


Foo f[] = new Foo[2];

Foo é uma interface vc não consegue criar uma instancia de interface acho que o que poderia fazer é

[code]

Foo f = new B();
Foo f2 = new A();

[/code][/quote]

Bem, ocorre que isto:

Foo[] f = new Foo[2];

é diferente disso:

Foo f = new Foo();

Onde Foo é uma interface. Acontece q não estou instanciando um novo objeto Foo, e sim um novo array de objetos Foo, onde cada posição sim será uma instancia de uma classe q implementa Foo. :joia:

Hummm…

Gostei da observação do Lula e da resposta do Matheus… e aproveitando que o assunto está ficando mais quente, gostaria de saber se a afrimação com relação à linha de código abaixo está correta:

Foo f = new A();

“Está sendo criada um objeto f, instância da classe A e que implementa a interface Foo”

Estou certo?

Está, mas A TEM que implementar Foo ou gera erro de compilação.

[size=“18”][color=“red”]Beleza Schuenemann,

Você respondeu antecipadamente uma pergunta que eu iria fazer, ou seja, A tem que “implements” Foo… senão é pau na certa.

Mas para dar continuidade à nossa dicussão (que na minha opinião está sendo muito proveitosa para qualquer leigo que não conheça polimorfismo), você se arriscaria a colocar um trecho de código do mesmo porte que o anterior, que implemente os conceitos de polimorfimos mas SEM O USO DE INTERFACES??

Se você puder fazer isso agradeço muito…[/color][/size]

perfeitamente, ou vc faz uso de interfaces, ou faz uso de herança de classes…