Porque não

5 respostas
P
class Animal
{
   public void eat()
   {     }
}

class Horse extends Animal
{
   public void eat()
   {     }

   public void buck()      {     }
}

Porque dado o código acima, eu não posso fazer o seguinte conjunto de códigos abaixo:

Animal c = new Horse();
c.buck();

5 Respostas

cv1

Pq vc esta lidando com um “Animal”, nao com um “Horse”. Pra ter acesso ao metodo “buck()”, voce precisaria fazer um cast de “Animal” para “Horse”, assim:

Animal c = new Horse(); Horse h = (Horse) c; c.buck();

Ou, de forma mais curta:

Animal c = new Horse(); ((Horse) c).buck();

P

Mas eu estou instanciando um objeto do tipo Horse… o compilador só verifica o tipo de referência e não o da instância então…

cv1

Sim, pq ele nao tem como verificar o tipo da instancia, e na verdade nao faria o menor sentido fazer essa verificacao, se vc pensar bem :wink:

Esse eh todo o tchans do polimorfismo :wink:

E

Se Animal fosse uma interface seria possível.

Daniel_Quirino_Olive

E se esta interface descrevesse um método buck();

Criado 9 de março de 2004
Ultima resposta 10 de mar. de 2004
Respostas 5
Participantes 4