Pequena duvida com polimorfismo

11 respostas
erickles

Olha só pessoal, tenho esse código aqui:

Mamifero cachorro = new Cachorro();

Tudo bem, entendi que todo cachorro eh um mamifero, e que um cachorro vai desempenhar todas as funções básicas de um mamifero, mas, se eu simplesmente fizesse assim:

public class Cachorro extends Mamifero;

Cachorro cachorro = new Cachorro();

A classe cachorro não iria realizar todas as funções de um mamifero, sem ter que fazer isso:

Mamifero cachorro = new Cachorro();

???

11 Respostas

von.juliano

Se vc fizer

Ele vai ter sim todos os métodos e atributos de um mamífero.

Fazer

Tem algumas vantagens, se vc fizer por exemplo:

Vc poderá criar um array de Mamiferos.

Ok! :thumbup:

R

Vamos lá,

Temos duas classes:
Mamifero e Cachorro. Sendo que Cachorro “extends” Mamifero, ou seja, é um Mamífero com mais métodos, atributos, enfim, um Mamífero diferente.

Quando você declara:

Mamifero caoMifero = new Cachorro();

Você cria uma referência Mamifero para um objeto Cachorro. Você tem que sacar que a referência Mamifero só sabe referenciar (puxa, que redundância) objetos Mamiferos. O que vai ocorrer, você só vai poder chamar métodos e atributos de objetos Mamifero num objeto Cachorro.

Se ficar complicadio, grita :slight_smile:

Abração.

Mantu

Dê uma lida neste post. Acho que vai te ajudar:
http://www.guj.com.br/posts/list/49267.java#258941

herbertins

cara é o seguinte, se vc fizer se vc fizer uma herança vc conssegue usar todos os metodos do mamifero, e se por um acaso o cachorro tem alguns metodos soh dele vc conssegue usar tbm, agora se vc fizer mamifero cao = new cachorro(); vc soh vai consseguir usar os metodos que todo mamifero tem, os especificos de cachorro nao.

espero ter ajudado

erickles

Bom, assim, posso por exemplo, criar um método na classe “Mamífero” que recebe um tipo “Mamifero”, dai então, ce eu fizer:

Mamifero cachorro = new Mamifero();

um cachorro poderia ser usado em tal método, eh isso?, essa eh a vantagem em polimorfismo?

erickles

erickles:
Bom, assim, posso por exemplo, criar um método na classe “Mamífero” que recebe um tipo “Mamifero”, dai então, ce eu fizer:

Mamifero cachorro = new Mamifero();

um cachorro poderia ser usado em tal método, eh isso?, essa eh a vantagem em polimorfismo?

perdão,

Mamifero cachorro = new Cachorro();

um cachorro poderia ser usado em tal método, eh isso?, essa eh a vantagem em polimorfismo?

erickles

up

josenaldo

Pense nas seguintes classes:

public abstract class Mamifero {
   public abstract void comer();
}

public class Cachorro extends Mamifero{
   public void comer() {
      System.out.println("Comer de cachorro");
   }
}

public class Gato extends Mamifero{
   public void comer() {
      System.out.println("Comer de gato");
   }
}

public class Macaco extends Mamifero{
   public void comer() {
      System.out.println("Comer de macaco");
   }
}

public class TestaMamifero{
   public static void main(String[] args) {
      Mamifero[] bichos = new Mamifero[3];
      bichos[0] = new Cachorro();
      bichos[1] = new Gato();
      bichos[2] = new Macaco();

      for(Mamifero m:bichos) {
         m.comer();
      }
   }
}

Com o polimorfismo, você pode usar classes mais especializadas como se fossem classes mais gerais. A saída desse programa será:

Comer de cachorro Comer de gato Comer de macaco
erickles

Bom, entaum para polimorfismo ser possivel, eh necessario uma herança entra as classes e reescrever o metodo da super classe ? Soh q ae, qdo vc chamar o metodo, eh realizado o metodo implementado na classe filha, cuja eh referenciada a classe Mamifero?

josenaldo

Exatamente. Assim todos os objetos que herdam direta e indiretamente de Mamifero podem ser usados como se fossem mamíferos.

Para isto, eles PODEM sobreescrever os métodos da superclasse, porém isso não é obrigatório, apesar de ser desejável para se obter o comportamento polimórfico.

Polimorfismo não necessariamente é usado somente com herança. Com interfaces também funciona.

erickles

Ah claro, a interface jah to manjando, vlw msm !!!

Criado 1 de fevereiro de 2007
Ultima resposta 1 de fev. de 2007
Respostas 11
Participantes 6