引用类型和对象类型

时间:2014-05-27 14:50:32

标签: java reference-type object-type

我指导同事OCA-Java 7认证。他也参加了一门课程并在那里做了准备考试。其中一个问题是关于参考和对象类型。这是代码:

package com.company;

public class Vehicle implements Mobile {

  public static void main(String[] args) {
    Truck theTruck = new Truck();
    Vehicle theVehicle = theTruck;
    Mobile theMobile = theVehicle;
  }
}

class Truck extends Vehicle {
}

interface Mobile {
}

问题:theMobile的参考类型和对象类型是什么?

以下是选择:

  • 参考类型是"移动",对象类型是"移动"
  • B参考类型是"卡车",对象类型是"卡车"
  • C参考类型是"移动",对象类型是"卡车"
  • D参考类型是" Car&#34 ;,对象类型是" Mobile"

答案B被标记为正确答案......但恕我直言答案C是对的。谁在这里错了?!

6 个答案:

答案 0 :(得分:8)

我从未见过这些用过的术语,但我认为它们的意思是声明的类型与运行时类型。

Mobile theMobile = theVehicle;

变量的声明类型为Mobile,运行时类型为Truck。答案C是正确的。

术语引用类型是指Java中不是基本类型而不是null类型的任何类型。

答案 1 :(得分:5)

  

这里有什么问题?

你的书/材料中的印刷答案在这里是错误的:p

theMobile类型的引用变量Mobile指的是Truck类型的对象。

所以答案3是正确的,引用类型是Mobile,对象类型是Truck

您可以使用theMobile.getClass()检查对象类型,该对象类型将返回Truck,引用类型是代码中静态声明的内容,即Mobile声明中的Mobile theMobile = ...。< / p>

答案 2 :(得分:3)

theTruckTruck。由于Truck延伸Vehicle,当您说Vehicle theVehicle = theTruck theVehicle仍为Truck时。执行Mobile theMobile = theVehicle时也是如此:您的对象仍然是Truck

编辑:根据另一个答案,C是正确的,因为您将Truck称为Mobile

答案 3 :(得分:1)

拇指规则

  

超类引用变量可以分配给子类Object

根据该规则Mobile theMobile可以分配给vehicleTruck

由于车辆未实例化,因此它也是参考类型

所以回答3 C Reference type is "Mobile", object type is "Truck" 是正确的

答案 4 :(得分:0)

回答C. Reference type is "Mobile", object type is "Truck"是正确的。虽然引用此时指向Truck对象,但它可以移动到指向实现Mobile或其子接口的任何对象。因此,引用类型是Mobile。

答案 5 :(得分:0)

还有另一个方便的拇指规则,它就像这样

Class_Name Reference_Variable = new Class_Constructor()

enter image description here

所以这段代码

Truck theTruck = new Truck();
Vehicle theVehicle = theTruck;
Mobile theMobile = theVehicle;

这里 -

  

theTruck 是&#34;参考变量&#34;类型卡车和&#34;对象类型&#34;卡车

     

theVehicle 是&#34;参考变量&#34;类型车辆和&#34;对象类型&#34; ofTruck&#34;参考&#34;,即卡车

     

theMobile &#34;参考变量&#34;类型为Moble 和&#34; 对象类型&#34; theVehicle&#34;参考&#34;,即卡车

所以选项C 是正确答案。