d在编译器看来是一个animal类型,但运行的时候是使用dog的方法,因为d在堆内存中是dog类型。若想调用d中有而animal类中没有的方法,编译器会报错,因为编译器还是认为d是animal类型。 所以这时需要强制向下转型。