Of course it will be compiler error in case 2. Horse class is a descendant to Animal. Animal is more 'wide' class, then the Horse. In terms of 'is-a' Horse is-an Animal, but Animal is-not a Horse. It's correct to assign Horse instance to Animal variable. But on compile time you still are working with Animal variable, and Animal doesn't have ...