Galera, boa noite.
Desculpe se ja há uma pergunta igual a essa no forum, mas eu ja procurei e não achei.
É o seguinte:
Eu estou relendo o livro Use a cabeça - Java (so pra ver se tem duvidas e talz).
Fiz um teste que é mais ou menos assim:
Superclasse = Animal
Subclasse = cachorro
A classe animal tem um metodo chamado makeNoise(). Sobreescrevi esse metodo na subclasse.
Fiz uma outra classe qualquer que tem um metodo que recebe um animal como paramentro.
O metodo faz isso:
void veterinario(Animal a) {
a.makeNoise();
}
Minha duvida é a seguinte:
Eu passando um cachorro (ou gato,ou lagartixa,etc) para esse metodo (sendo essa classe uma subclasse de animal), dentro do metodo (void veterinario(Animal a)), ele não deveria se comportar como um animal e não como um cachorro? O metodo a ser chamado não deveria ser o metodo da classe declarada como parametro na assinatura do metodo?
Eu entendo que quando um metodo é sobreescrito, é chamada a versão mais especifica, mas não entendi isso com o parametro.
Obs: Eu fiz o teste e é chamado o metodo mais especifico. So queria tirar a duvida do Por que?
Valeu galera.
Espero ter sido o mais claro possivel.
