引用类型在对象创建中有两个用途吗?

时间:2017-03-02 19:29:01

标签: java

假设您有标准的java示例:

{ r: 'i', w: 'o', a: 'b' }

当你创建一个新的狗对象时,你可以

class Animal {
// some methods and a constructor are here
}

class Dog extends Animal {
// some methods and a constructor are here
}

指向的参考类型'狗'有目的;它使x成为一个引用类型变量,因为x需要保存一个内存地址或至少一些指向Dog对象的数据,该对象位于堆中。原始类型将无法修改x以执行该目的。所以这是引用类型的目的1。

然而,它也有不同的用途;它修改了对象Dog()的功能。如果你写了

Dog x = new Dog()
 ^

从我的实验中,对象Dog将能够执行Animal类中指定的所有方法,但是它无法执行Dog类中指定的方法。然而,一个

Animal x = new Dog () 

能够执行Animal类中的所有方法以及Dog类中的方法。很明显,引用类型对对象的本质有一些影响。

我的问题:引用类型是否有两个目的?目的1:它允许变量保存内存地址或类似的东西。目的2:它修改新创建的对象的功能。或者我误解了什么?

(如果您想将此标记为重复或关闭它,如果您花时间先阅读问题而不是根据问题中某些关键字的粗略一瞥来关闭它,我将不胜感激。谢谢)

1 个答案:

答案 0 :(得分:2)

你过度思考它。这个操作:

Animal x

或:

Dog x

只需声明指定类型的变量(x)(分别为AnimalDog)。这就是全部。它没有"限制能力"或类似的东西。编译器/运行时可以确定如何存储变量或基于该类型对变量允许的操作。但你所做的只是声明这种类型。

如果x的类型为Animal,那么您可以执行x类中定义的Animal次操作。如果类型为SomethingElse,则可以执行SomethingElse类中定义的操作。等