在铸造java中的继承版本
问题描述:
我对以下练习感到困惑,并且没有在搜索功能中发现那种问题。在铸造java中的继承版本
这些替代产品都是可执行文件,因为:
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();
- 错:是错误的,因为它与狗无关。
- 不错:对象是Dog的高级类,我们将它投射到延伸动物的Dog,所以它没关系。
- 不错:没关系,因为每条狗都是动物。
- 错误:新的类不defiend,所以它错了。
我的推理是否正确?我很感谢每一个帮助。
答
没有尝试过,但我认为:
(1) Animal t = new Object();
无效 - 一个Object
不是Animal
- 不会编译
(2) Animal t = (Dog) (new Object());
无效 - 一个Object
不是Animal
- 会编译但在运行时会失败
(3) Animal t = new Dog();
罚款 - 一个Dog
是Animal
(4) Animal t = (Dog) new Class();
这是一样的(2) - 你肯定你把它抄了吧?
+0
是的,我做过。这可能是更容易的问题之一,但我很困惑,尤其是(2)和(3)。谢谢你。 – PeterPan
你可以很容易地测试,不是吗? – Blorgbeard
我不会给你一个你的问题的答案,但你想要搜索的魔术关键字是'java多态性' – engineercoding
对象的类是对象本身的质量。无论你将它转换成什么,你都不会改变对象的类,只是你的代码选择如何查看该类。如果你创建的对象不是继承自动物的类,则施放不会使它成为动物。 – VGR