title: What's the purpose behind wildcards and how are they different from generics?
body: <p>I'd never heard about wildcars until a few days ago and after reading my teacher's Java book, I'm still not sure about what's it for and why would I need to use it.</p>
  
  <p>Let's say I have a super class <code>Animal</code> and few sub classes like <code>Dog</code>, <code>Cat</code>, <code>Parrot</code>, etc... Now I need to have a list of animals, my first thought would be something like:</p>
  
  <pre><code>List&lt;Animal&gt; listAnimals
  </code></pre>
  
  <p>Instead, my colleagues are recommending something like:</p>
  
  <pre><code>List&lt;? extends Animal&gt; listAnimals
  </code></pre>
  
  <p>Why should I use wildcards instead of simple generics?</p>
  
  <p>Let's say I need to have a get/set method, should I use the former or the later? How are they so different?</p>