vou te dar um exemplo:
public class Animal {
public Animal getCanguru(){
return new Canguru();
}
}
public class Canguru extends Animal{
public Canguru getCanguru(){
return new Canguru();
}
}
isso só funciona por que na Classe Canguru tem o extends, então na classe Animal, quando eu utilizo a classe canguru, a classe Animal identifica que a classe canguru é uma classe também do tipo Animal,
imaginemos sua utilidade:
quero retornar apenas 1 lista de vários tipos de animais e cada um vai imprimir um texto diferente quando eu mostrar na tela.... como vc faria isso?
listadeAnimais.add(canguru),
listadeAnimais.add(elefante),
como uma lista pode aceitar 2 tipos de objetos diferentes ???
na hora de imprimir você da o CAST do tipo de objeto Pai....
esta ai sua utilidade,
TESTES:
remova o extends, e olhe o que acontece...
retorne um Animal no método do canguru:
public Animal getCanguru(){
return new Canguru();
}
coloque vários animais diferentes em uma lista e tente imprimi-los
debugue o código