问题关于对象的类型

时间:2010-11-23 12:13:23

标签: java object types

我正在学习java并对对象类型有疑问。

以下面的例子为例:

class A { }

class B extends A { }

class C {A myObject = new B();}

描述myObject类型的可接受方式是什么?

你会说它是A型,B型,还是A型和B型?

感谢。

4 个答案:

答案 0 :(得分:6)

myObjectA类型的引用(您的变量声明为A类型。)

myObject引用的对象本身属于B类型。该实例的类型为B

这是一个背景和焦点问题。 在其他地方使用myObject时,您可能不知道它是类B的实例,只是它是A类型。

答案 1 :(得分:1)

它是A类型,因为type表示你可以用它做的操作,但它是B的一个实例,所以你所做的所有操作都是B方式。

答案 2 :(得分:1)

myObject是具有声明的编译时类型A的字段。在运行时,它将引用类型B的对象。

声明(或编译时)类型的变量和对象的运行时类型之间的区别对于理解多态如何在像Java这样的静态类型语言中工作至关重要。有些东西(比如重写方法的调用)是由运行时类型确定的,其他的(比如重载或静态方法的调用)由编译时类型确定。

通常:声明的类型确定您可以对对象执行的操作,而运行时类型确定它的行为方式。

答案 3 :(得分:0)

继承意味着“是一种”关系 - 子类的实例是超类的实例。在您的示例中,由于B扩展了A,B的实例也是A的实例 - 这就是为什么您可以将新B分配给A类型的变量而不进行强制转换。

变量myObject是A类型,但它引用的是一个真正属于B类的对象。