Java Variable type and instantiation
<p>This has been bugging me for a while and have yet to find an acceptable answer.  Assuming a class which is either a subclass or implements an interface why would I use the Parent class or Interface as the Type i.e.</p>

<pre><code>List list = new ArrayList();
Vehicle car = new car();
</code></pre>

<p>In terms of the ArrayList this now only gives me access to the List methods. If I have a method that takes a List as a parameter then I can pass either a List or an ArrayList to it as the ArrayList IS A List.  Obviously within the method I can only use the List methods but I can't see a reason to declare it's type as List.  As far as I can see it just restricts me to the methods I'm allow to use elsewhere in the code.</p>

<p>A scenario where List list = new ArrayList() is better than ArrayList list = new ArrayList() would be much appreciated.</p>
