Hello Alex,
I apologize, i haven't read the whole
thread, but skimmed through it and only got a fair idea that you want to know
why Animal has been put as the return type when it is abstract and not useful.
Well, i think so, have you heard something like 'Programming to an interface'. Please have a look at Strategy
Pattern specially.
In this way, you are hiding the implementation from the user. Lets say your class was not abstract but an interface for suppose.
We always promote Programming to Interfaces, because they hide your implementation details. The people who are using your
application will never know what concrete implementation you are using.
Do you know java.util.Calendar is even an abstract class?
Hope this helps,