为什么子类引用不能在java中保存超类对象

class One{ } class Two extends One{ } class Main{ public static void main(String[] args){ Two t = new One(); // invalid }` } 

我无法理解它背后的原因,为什么子类引用不能保存父对象,而超类引用可以保存子类的对象。

因为狗具有动物的所有行为,但是只知道是动物的东西不能保证具有狗的所有行为。

每个孩子都是父母,但不是每个孩子都是孩子。 inheritance规则。

TWO的类型不能是ONE的实例,因为TWO拥有哪些ONE没有的成员和方法。 但是,ONE的类型可以引用TWO,因为TWO拥有ONE拥有的所有内容。

例如,如果ONE可以WALK,TWO也可以RUN,那么如果你有ONE类型的对象,则需要能够WALK。 因此,如果ONE引用TWO,那么因为TWO可以行走。

但是当你有一个TWO类型的对象时,它需要能够运行,所以你不能将它引用到无法运行的ONE。

如果我们根据集合论来思考,与父类相比,子类是超集。 与父类相比,子类具有所有可能的属性和方法。

因此,父类对象可以引用其子类对象,因为子类对象包含父类的方法和属性。 反之亦然,由于父类对象没有子类所需的所有方法和属性,因此子类对象不能引用父类对象。