title: when to use extends or implements Comparable (Java) ? + why I cannot create object
body: <p>I am Studying Data Structures and I was asked to write a program that allows a store manager to manipulate an inventory , using 4 classes :   ListInterface , ExpandableArrayList ( a class that implements the interface) , class item ( which is the type stored in the Arraylist) , and of course, a Test class. </p>
  
  <p>some methods require the use of <strong>compareTo</strong>. that is , being <strong>Comparable</strong> , but I don't know what class exactly should be Comparable ? 
  and if I should write <strong>Implements</strong> or <strong>extends</strong> Comparable ?</p>
  
  <p>these are the class headers I have right now : </p>
  
  <pre><code>public interface ListInterface&lt;T extends Comparable &lt;?super T &gt;&gt; {... }
  
  public class ExpandableArrayList &lt;T extends Comparable &lt;? super T &gt;&gt;
  implements ListInterface &lt;T&gt; { ...... } 
  
  public class Item&lt;T extends Comparable&lt;T&gt;&gt; {... } 
  </code></pre>
  
  <p>but for some reason, I cannot create an Object in the Test class.
  when I type:</p>
  
  <pre><code>ListInterface&lt;Item&gt; inventoryList= new ExpandableArrayList&lt;Item&gt;(); 
  </code></pre>
  
  <p>I get the following errors :</p>
  
  <pre><code>Test.java:9: error: type argument Item is not within bounds of type-variable T 
  ListInterface&lt;Item&gt; inventoryList= new ExpandableArrayList&lt;Item&gt; () ; 
  where T is a type-variable:
  T extends Comparable&lt;? super T&gt; declared in interface ListInterface
  
  
  Test.java:9: error: type argument Item is not within bounds of type-variable T 
  ListInterface&lt;Item&gt; inventoryList= new ExpandableArrayList&lt;Item&gt; () ;
  where T is a type-variable:
  T extends Comparable&lt;? super T&gt; declared in class ExpandableArrayList
  </code></pre>
  
  <p>How Can I solve this? what exactly should be changed? .. </p>
  
  <p>thanks a lot in advance. </p>