[Resolvido] Estou tentando entender poliformismo mais esta dificil, anida não consegui compreender a logica da coisa.
Se estou extendendo uma classe porque preciso copiar o mesmo metodo da super classe.
Por exemplo cao latir, gato minha, super classe animal, como faço para diferenciar uma da outra quanto for chamar gato ou cao preciso criar um objeto para cada um deles.
public class animal{
void comer(){
}
void beber(){
}
}
public class Felino extends Animal{
}
public class Gato extends Felino{
}
public class Canino extends Animal{
}
public class Cao extends Canino{
}
Quero saber como diferencio cada um de cada um, se preciso copiar os metodos em cada classe idem da classe animal.
A beleza da coisa está justamente no fato de que você não precisa copiar os métodos e atributos da classe mãe para as classes filhas. Se você declara um método/atributo público na sua classe mãe, automaticamente você pode acessá-lo através de qualquer referência de uma classe filha, sem precisar repetir o código na classe filha.
marciojesus
Ate ai eu entendi, mas o problema como faço cao latir e gato miar sem copiar o metodo da classe abstrata ou super.
estou criando objetos para as classes mas nao consigo chamar os metodos sem copialos e alterar seus dados nas subclasses.
rmendes08
marciojesus:
Ate ai eu entendi, mas o problema como faço cao latir e gato miar sem copiar o metodo da classe abstrata ou super.
estou criando objetos para as classes mas nao consigo chamar os metodos sem copialos e alterar seus dados nas subclasses.
Bom, nesse caso você não está “copiando” o método, mas sobrescrevendo o método. Nesse caso você tem que repetir a declaração do método, mas a implementação é algo completamente novo. Mas se você ainda precisa da funcionalidade da classe mãe você pode acessá-la através da referência super. Nesse caso, você deve chamar o método da classe mãe assim:
Gostaria de saber como faço para fazer gato miar e cao latir sem alterar a classe animal?
Posso ate usar o super para chamar os metodos da classe animal, entao eu sobreescrevo o metodo interno da classe cao e dog?
Porque o que nao entendi e como vou fazer tais metodos sem alterar a classe principal, posso dizer na principal que cao vai latir, mas e o gato como eu faço?
valeu pela ajuda e que preciso entender antes de prosseguir no livro estou estudando para certificação.
rmendes08
Você não precisa alterar a classe Animal. A idéia da herança é essa.
Gostaria de saber como faço para fazer gato miar e cao latir sem alterar a classe animal?
Posso ate usar o super para chamar os metodos da classe animal, entao eu sobreescrevo o metodo interno da classe cao e dog?
Porque o que nao entendi e como vou fazer tais metodos sem alterar a classe principal, posso dizer na principal que cao vai latir, mas e o gato como eu faço?
valeu pela ajuda e que preciso entender antes de prosseguir no livro estou estudando para certificação.
marciojesus
Muito obrigado pela dica, mas poderia dar uns exemplos, pois nao vi vantagem nenhuma, se preciso sobreescrever os metodos da super classe, qual a vantagem?
marciojesus
Valeu pela pizza ficou mas claro, vou dar uma lida com atenção.
grato
Rodrigo_Sasaki
pensa assim… se você tem uma lista com os mais variados animais… não sabe que animais tem la… mas cada um emite o seu tipo de som…
voce pode correr essa lista pelo tipo “genérico” que é Animal, e mandar cada animal emitir som, porém cada animal vai emitir seu próprio som, sem você ter que se preocupar com a implementação de cada um.
tem uns exemplos mais práticos na apostila do curso FJ-11 da Caelum, talvez dê uma clareada… pode fazer o download que é gratuito
marciojesus
Valeu muito obrigado, ate ai eu entendi, mas preciso sobreescrever os metodos de cada classe ? Correto?
Preciso falar para cada classe o quem faz o que.
mesmo tendo esses metodos na classe mae.
rmendes08
marciojesus:
Valeu muito obrigado, ate ai eu entendi, mas preciso sobreescrever os metodos de cada classe ? Correto?
Preciso falar para cada classe o quem faz o que.
mesmo tendo esses metodos na classe mae.
Depende. Se o supertipo da sua hierarquia for uma classe você pode definir uma implementação padrão. Nesse caso, as subclasses podem utilizar a implementação padrão ou definir uma nova implementação. Existem casos e casos.
C
Caikeke
É meio difícil aprender polimorfismo porque ele ta sempre mudando.
marciojesus
Valeu muito obrigado pela dica, agora ficou mas claro as vantagem de herança.
Alias você sentiu vantagem em ter certificação para conseguir trabalho como programador ?