Duvida: Váriável Polimórfica!

Estou estudando sobre polimorfismo, porém não consegui entender o conceito de váriavel polimórfica…
Será que alguem poderia postar um conseito simples? E de preferencia com um exemplo, para esclarecer melhor…

Valew :smiley:

Nunca tinha ouvido falar disso, mas pela definição pode ser algo como:

Object obj;
obj = new String ("teste");
obj = new Integer (10);
obj = new Cliente ("José Aparecido", "japarecido@planalto.gov.br", 200);

Ou seja, em um programa é uma variável que contém diferentes tipos de objetos durante a execução do programa.

Suponhamos que você tenha duas classes certo.

Public class A{
     metodo1(){

     }
     metodo 2(){

     }
}
Public class B extends A{
     metodo1(){

     }
     metodo 2(){

     }
     metodo3(){
     
     }
}
Public class Teste{
     public static void main(String[]args){
     
          A a = new B();
     
          a.metodo1();
          a.metodo2();
          a.metodo3();
     
          a = new A();
         
          a.metodo1();
          a.metodo2();
     }
}

pronto, aqui cara é o seguinte você ta vendo que eu criei uma referencia do tipo A, e estou chamando metodos tanto da classe A como da classe B.
mas tem um porem polimorfismo so pode ser aplicado da classe Pai para a classe filha você n
ao pode fazer;

B b = new A();

e quando você fizer estiver usando polimorfismo os metodos que você estará chamando sera o de hierarquia mais baixa. E caso você precise usar um metodo quer apenas a classe B tem, tera quer ser feito um casting.

Valew pelas respostas sanaram minhas duvidas…

E um exemplo de polimorfismo alguem poderia repassar??
Algo de simples compreensão =]

[quote=marcio_jagua]Valew pelas respostas sanaram minhas duvidas…

E um exemplo de polimorfismo alguem poderia repassar??
[/quote]

“polimorfismo” é um conceito amplo. Existem vários tipos e é expresso de várias formas. Os exemplos acima são exemplos de polimorfismo. Variável polimorfica é uma das expressões de polimorfismo.

Public class Animal{

     public void emitirSom(){
          System.out.println("Som de um animal indefinido.");
     }

}
public class Cachorro extends Animal{

     public void emitirSom(){
          System.out.print("Som do cachorro.");
     }

}
public class TestaAnimal{
     public void main(String[]args){

         Animal a = new Cachorro();

         a.emitirSom();
     }
}

pronto cara acho que pelos exemplos acima já daria pra você ter imaginado alguma cois. Mas como pedido ta aqui o exemplo.

a saida do programinha será: Som do cachorro.

[quote=sergiotaborda][quote=marcio_jagua]Valew pelas respostas sanaram minhas duvidas…

E um exemplo de polimorfismo alguem poderia repassar??
[/quote]

“polimorfismo” é um conceito amplo. Existem vários tipos e é expresso de várias formas. Os exemplos acima são exemplos de polimorfismo. Variável polimorfica é uma das expressões de polimorfismo.[/quote]

Será que você não poderia exemplificar então, um método polimórfico?

cara o exemplo do cara ai acime ta pefeito como ele instanciou um animal cachorro poderia ser uma coruja que faz um som diferente…

entendeu isso e um polimorfismo de metodo…

se ele tivesse feito assim

[code]
public class Coruja extends Animal{

public void emitirSom(){
System.out.print(“crúúúú crúúúú.”);
}

} [/code]

public class TestaAnimal{  
     public void main(String[]args){  
 
        Animal a = new Coruja();  
          a.emitirSom();  
     }  
 } 

agora me diz qual ,metodo ele vai executar do animal… a?

Polimorfismo = Do grego muitas formas. Ou seja, mesmo você chamando método emitir som ( usando o exemplo acima ) da classe Base ( animal), devido a uma manipulação interna de ponteiros implementadas em algumas linguagens, o compilador pode “escolher” em tempo de execucão ( ligação tardia ) dentre as funções emitir som das classes derivadas, a adequada. No caso só tem uma, a emitir som da coruja. Poderiam existir 10 animais que emitissem som, mas com o polimorfismo ele escolheria o adequado. Isso acontece porque a linguegem java implementa um mecanismo chamado Tipo de Referência Real.

[quote=lopima]Suponhamos que você tenha duas classes certo.

Public class A{
     metodo1(){

     }
     metodo 2(){

     }
}
Public class B extends A{
     metodo1(){

     }
     metodo 2(){

     }
     metodo3(){
     
     }
}
Public class Teste{
     public static void main(String[]args){
     
          A a = new B();
     
          a.metodo1();
          a.metodo2();
          a.metodo3();
     
          a = new A();
         
          a.metodo1();
          a.metodo2();
     }
}

pronto, aqui cara é o seguinte você ta vendo que eu criei uma referencia do tipo A, e estou chamando metodos tanto da classe A como da classe B.
mas tem um porem polimorfismo so pode ser aplicado da classe Pai para a classe filha você n
ao pode fazer;

B b = new A();

e quando você fizer estiver usando polimorfismo os metodos que você estará chamando sera o de hierarquia mais baixa. E caso você precise usar um metodo quer apenas a classe B tem, tera quer ser feito um casting.[/quote]

olá só uma correção quanto ao exemplo a cima, quando tratamos de polimorfismo, podemos pensar no conceito de heranca, quando um objeto herda de outro no caso classe B extends A entao podemos afirmar que B é um A, isso facilita o compreendimento de polimorfismo.

vou a um exemplo mais pratico,

classe funcionario extends classe pessoa

todo funcionario é uma pessoa, mais nem toda pessoa é obrigatoriamente um funcionario, pode haver outra classe que extends pessoa.

pronto agora quanto ao polimorfismo, nada mais é do que uma variavel “Generalizada” de tipo, ou seja, uma variavel do tipo pessoa pode receber qualque objeto que esteja em classes mais abaixo na hierarquia.

existe tambem o conceito de sobrecarga de metodos, onde um metodo tem o mesmo cabecalho, porem passa parametros diferentes, esse caso tambem é considerado polimorfismo, porem de metodos, diferente de sobre escrita, que um metodo tem o memso cabecalho e passa os mesmos parametros.

espero ter ajudado

[quote=alanbrasil1984]cara o exemplo do cara ai acime ta pefeito como ele instanciou um animal cachorro poderia ser uma coruja que faz um som diferente…

entendeu isso e um polimorfismo de metodo…

se ele tivesse feito assim

[code]
public class Coruja extends Animal{

public void emitirSom(){
System.out.print(“crúúúú crúúúú.”);
}

} [/code]

o java identifica que o animal é uma coruja e busca o metodo na classe certa

public class TestaAnimal{  
     public void main(String[]args){  
 
        Animal a = new Coruja();  
          a.emitirSom();  
     }  
 } 

agora me diz qual ,metodo ele vai executar do animal… a?
[/quote]