【发布时间】:2018-03-18 12:00:49
【问题描述】:
我对下面的练习有点困惑,并没有用搜索功能找到那种问题。
鉴于以下情况,这些替代方案中的哪些是可执行的:
class Animal
class Dog extends Animal //Dog is an extension of Animal
我们想将Dog 类的对象分配给Animal 类型的变量:
(1) Animal t = new Object();
(2) Animal t = (Dog) (new Object());
(3) Animal t = new Dog();
(4) Animal t = (Dog) new Class();
- 错误 : 是错误的,因为它与狗无关。
- good : Object 是 Dog 的上类,我们将它转换为 Dog,它扩展了 animal,所以没关系。
- 好:没关系,因为每只狗都是动物。
- 错误 : new Class 没有被拒绝,所以它是错误的。
我的推理对吗?感谢您的每一次帮助。
【问题讨论】:
-
你可以很容易地测试这个,不是吗?
-
我不会回答你的问题,但你要搜索的神奇关键字是
java polymorphism -
对象的类别是对象本身的品质。无论你将它转换成什么,你都不会改变对象的类,只是你的代码如何选择查看该类。如果您创建的对象不是继承自 Animal 的类,则强制转换不会使其成为 Animal。
-
@OHGODSPIDERS 这仅适用于 Object 还是generell?,例如。 G。动物A =(狗)新宠物(); Dog 扩展 Pet 和 Pet 扩展 Animal 的地方在哪里?
-
@PeterPan 您只能转换为对象实际存在的东西。铸造不会“转换”任何东西,它只会改变现有对象的处理方式。因此,您可以将 Dog 投射到 Animal 上,但不能反过来。但是,您可以执行以下操作:
Object obj = new Dog(); Dog dog = (Dog) obj;因为 obj 已经是 Dog 并且仅分配给 Object 类型的变量。
标签: java inheritance casting