如何使用 class 名称的混合来创建子 class 扩展抽象父 class 的实例而不会出错?

How is creating an instance of a subclass extending an abstract parent class using a mix-up of both the class names error-free?

我认为这个问题需要一些说明。

所以,这是一个示例代码。

// Animal - abstract class (Parent class)
// Dog - inherited class (Sub class)

Animal puppy = new Dog(); // creating an instance.

所以我的问题是,如何在实例化对象时同时使用 class 名称是正确的? 对不起,如果这是一个愚蠢的问题。有人可以解释这个奇怪实例化的故障吗?

new Dog() 创建 Dog 的新实例并 returns 对该 Dog 的引用

Animal puppy 创建一个变量(一个命名的东西,可以保存对一个对象的引用),它能够引用任何对象,它是一个动物

= 将左边的变量初始化为右边的值。由于 Dog Animal,对 Dog 的引用是 对 Animal 的引用,因此初始化是合法的。