使用继承初始化新类

时间:2016-07-19 17:56:32

标签: java inheritance polymorphism

有人可以解释这三个声明之间的差异。

Animal var = new Dog()

Dog var = new Dog()

Dog var = new Animal()

第二个声明最常用,但我不明白左派对正确的班级有什么作用,或者当你使用其中一个对比时。

假设是Dog extends Animal。

2 个答案:

答案 0 :(得分:1)

右边的"类型" ([Authorize])是正在创建的实例的实际类型。 它必须是真正的类(不是接口)。 这个类定义了真实的,实现的行为"新对象。

左边的"类型" (Dog)是用于存储对正在创建的实例的引用的变量的类型。 左边的"类型"必须是右边"类的祖先类/接口" (否则你必须做一个演员表)。 使用此变量(没有强制转换),您只能访问Animal的属性/方法(没有Animal的其他属性/方法),并且您可以假设 {的合同已实现{1}} ,但不知道任何细节,如果类型为Dog,您就会知道这些细节。

这是非常基本的多态性,请阅读相关教程/书籍以获得更多见解。

这是一个小例子:

Animal

请按以下步骤查看:所有Dog都是Animal a1 = new Animal(); // works Animal a2 = new Dog(); // works, Dog a subtype of animal Dog d1 = new Animal(); // does not work, Animal not a subtype of Dog a1 = a2; // works d1 = a1; // doesn't work // If Dog has a function "bark" and Animal has a function "breathe" a1.breathe(); // works d1.breathe(); // works d1.bark(); // works a1.bark(); // does not compile, Animal not always a Dog s,因此您可以为Dog变量分配Animal值。但并非所有Dog都是Animal,因此您无法将所有Animal分配给Dog类型的变量。

答案 1 :(得分:0)

  1. 狗是一种特殊的动物。所以你可以叫狗动物。

  2. 当然,狗是狗。

  3. 动物可能不是狗,可能是猫,老鼠等。所以你不能用这种方式。