Deadly diamond of death:
Grandma
/ \
/ \
Mama Papa
f() f()
\ /
\ /
Baby
Baby b = new Baby();
b.f() //uh oh WHO'S f()?
C++
stream
/ \
istream ostream
\ /
iostream
reason it works: strict separation of function
with istream and iostreeam.
Inheritance is an "is-a" relationship.
It is also a subtype relationship.
A final class cannot be subclassed:
String
Wrappers for primitives