型宣言の必要性

さて、getFavoriteAnimal() 関数内の変数 animal は、何の型としてコンパイルされるべきでしょう?

こういう場合はおっしゃる通りわからないと思うので、コンパイラさんは「わかんないー」って言えばいいんじゃないでしょうか。
んで、仕方がないから、ちゃんと宣言して使うと。
弾さんの元記事のは型推論オンリーじゃなくて、できるときに楽ちんぐらいのもんだと私は思ってました。

どちらにせよ、変数 animal は事前に型宣言が必要になってしまいます。

だから、これはその通りですが、型推論あったら便利でいいじゃん!ということなんじゃないかなぁと。

というのも、キャストしてやれば問題ないような。

でも、これ見るとそんな風に思ってるようには見えませんね。(これは私の発言)

追記

あげてもらった上の例でも不整合がでたらスーパークラスを試すという方法もありじゃないかな、と思ったり。