ローカル変数を抽象型で宣言する利点
http://cappuccino.jp/keisuken/logbook/20080308.html#p02
http://d.hatena.ne.jp/kwatch/20080309/1205022466
http://d.hatena.ne.jp/odz/20080309/1205034733
微妙なことかもしれませんが、ローカル変数を抽象型で宣言する利点があります。
例えば、
List<String> list = new ArraysList<String>();
以下色々な処理
として、プログラムを書いていけば、LinkedListを使いたくなったら速度よりもメモリ効率が優先したくなったら
List<String> list = new LinkedList<String>();
以下色々な処理
と少し書き直すだけでよく、別の実装を試すことができます。
具体的な型でプログラムをかけば、よりたくさんのメソッドが使えるという利点があるのは納得ですが、結局使わなければ意味がありません。
無条件にアップキャストするべきではないという意見には賛成で、アップキャストすべきかどうかは、使いたいオブジェクトがなんなのかを明確にして、それにあったオブジェクトを使うべきではないでしょうか。