title: Why can't I extend an instantiable class with a new value component while preserving the compareTo contract?
body: <p>Per <em>Effective Java</em> by Joshua Blotch:</p>
  
  <blockquote>
    <p>There is no way to extend an instantiable class with a new value
    component while preserving the <code>compareTo</code> contract, unless you are
    willing to forgo the benefits of object-oriented abstraction</p>
  </blockquote>
  
  <p>Can you please explain the above with examples and the challenges?  Can you also explain what Joshua means by "Value Component" and what other types of components are available.</p>
  
  <blockquote>
    <p>This frees you to implement whatever <code>compareTo</code> method you like on the
    second class, while allowing its client to view an instance of the
    second class as an instance of the first class when needed.</p>
  </blockquote>
  
  <p>Can you also explain what Joshua means by <em>second class as an instance of the first class</em>?  </p>