在铸造java中的继承版本

在铸造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(); 
  1. :是错误的,因为它与狗无关。
  2. 不错:对象是Dog的高级类,我们将它投射到延伸动物的Dog,所以它没关系。
  3. 不错:没关系,因为每条狗都是动物。
  4. 错误:新的类不defiend,所以它错了。

我的推理是否正确?我很感谢每一个帮助。

+3

你可以很容易地测试,不是吗? – Blorgbeard

+1

我不会给你一个你的问题的答案,但你想要搜索的魔术关键字是'java多态性' – engineercoding

+1

对象的类是对象本身的质量。无论你将它转换成什么,你都不会改变对象的类,只是你的代码选择如何查看该类。如果你创建的对象不是继承自动物的类,则施放不会使它成为动物。 – VGR

没有尝试过,但我认为:

(1) Animal t = new Object(); 

无效 - 一个Object不是Animal - 不会编译

(2) Animal t = (Dog) (new Object()); 

无效 - 一个Object不是Animal - 会编译但在运行时会失败

(3) Animal t = new Dog(); 

罚款 - 一个DogAnimal

(4) Animal t = (Dog) new Class(); 

这是一样的(2) - 你肯定你把它抄了吧?

+0

是的,我做过。这可能是更容易的问题之一,但我很困惑,尤其是(2)和(3)。谢谢你。 – PeterPan