让我重命名您的班级,以使事情更加清楚。 Base
-> Animal
。 Derived
-> Cat
。
仅仅因为你是一个Animal
人并不意味着你是一个人Cat
。你可能是一个Dog
。这就是将A强制Animal
转换为A的原因Cat
。
另一方面,每个Cat
是Animal
吗?答案是“是”。这就是为什么您 可以 编写如下代码:
Animal animal = new Cat();
要么
Cat cat = new Cat();
Animal animal = cat;
另外值得注意的是,您 可以 执行以下操作:
Animal animal = new Cat();
Cat cat = (Cat) animal;
这样做的原因是您的animal
变量实际上是在引用Cat
实例。因此,您可以将其强制转换回引用的变量Cat
。