If a class extends another class or implements an interface, then an 'is a' relationship exists (don't forget every class implicitly extends Object).
<code>One</code> 'is a' <code>Zero</code>
<code>Two</code> 'is a' <code>MyNumber</code>
If a class contains another object then it 'has a' relationship with the contained object.
<code>Three</code> 'has a' <code>
String</code> object.
If you can replace a reference to the object with it's superclass type then an 'is a' relationship exists.
The above works because every <code>One</code> object 'is a' <code>Zero</code> object as well.
But you can't say <code>String s = new Three()</code> because a <code>Three</code> object 'has a' <code>String</code> object; it isn't a <code>String</code> object itself.
Hope that helps.
------------------
Jane Griscti
Sun Certified Programmer for the Java� 2 Platform