Inhertiance
"is a" vs. "has a" Composition: A class has objects of various types as state. BigFraction: A BigFraction has two BigIntegers. You know taht every class you create is an Object.
Grandpa / Mama Papa f() f() \ / Baby Baby b = new Baby(); b.f(); //what's the problem? What if Mama's and Papa's f()s do different stuff. DIAMOND OF DEATH: It is not allowed in Java. Once you inherit, you can't do so again. Why is this ok for interfaces? THEY HAVE NO CODE.