为什么在java中不允许这种贬低?

rb6*_*612 2 java oop polymorphism downcast

假设我有一个超类Animal,以及一个子类Dog.

我们可以说:

Animal a = new Dog();
Run Code Online (Sandbox Code Playgroud)

我们不能低声说:

Dog b = new Animal();
Run Code Online (Sandbox Code Playgroud)

所以我明白动物不一定是狗.但是,为什么在狗容器中有动物"蓝图"会抛出异常呢?因为Dog从Animal继承了方法,当我们把这种动物放入狗容器中时,我们知道Dog继承/覆盖了Animal所有的方法,那为什么Java不允许这样呢?

谢谢!

Eri*_* J. 7

Dog b = new Animal();
b.Woof();
Run Code Online (Sandbox Code Playgroud)

Animal没有名为Woof()的接口/方法.它不知道如何表现得像狗,但所有的狗都知道如何表现得像动物.