I like to think of the animal analogy. Every dog is an animal, but not every animal is a dog. In your example, every B IsA A, but not every A IsA B. So you're not allowed to assign a reference variable of type B, an object of type A. Your animal could be an opossum.