Подтвердить что ты не робот

Тип ссылки и тип объекта

Я наставляю коллег OCA-Java 7 Certification. Он также посещал курс и проводил там экзамен на подготовку. Один из вопросов касался ссылок и типов объектов. Вот код:

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 Тип ссылки - "Автомобиль", тип объекта - "Мобильный"

Ответ B помечен как правильный ответ... но ответ IMHO C прав. Кто здесь не прав?!

4b9b3361

Ответ 1

Что здесь не так?

Отпечатанный ответ в вашей книге/материале здесь неправильный: p

Эталонная переменная theMobile типа Mobile относится к объекту типа Truck.

Итак, ответ 3 верен, тип ссылки Mobile и тип объекта Truck.

Вы можете проверить тип объекта с помощью theMobile.getClass(), который вернет Truck, а ссылочный тип - это то, что статически объявлено в вашем коде, что Mobile в объявлении Mobile theMobile = ....

Ответ 2

Я никогда не видел эти термины, используемые для этого, но я предполагаю, что они подразумевают тип объявленного типа vs.

Mobile theMobile = theVehicle;

У переменной есть объявленный тип Mobile и тип времени выполнения Truck. Ответ C верен.

Тип ссылочного типа относится к любому типу в Java, который не является примитивным, а не типом null.

Ответ 3

theTruck является Truck. Поскольку Truck продолжается Vehicle, когда вы говорите Vehicle theVehicle = theTruck theVehicle, все равно Truck. То же самое, когда вы делаете Mobile theMobile = theVehicle: ваш объект по-прежнему остается Truck.

EDIT: согласно другому ответу, C является правильным, потому что вы имеете в виду ваш Truck как Mobile.

Ответ 4

Правило большого пальца

ссылочная переменная суперкласса может быть назначена подклассу Object

В соответствии с этим правилом Mobile theMobile может быть присвоено значение vehicle или Truck

В качестве транспортного средства не создается экземпляр, он также является ссылочным типом

Итак, ответ 3 C Reference type is "Mobile", object type is "Truck" правильно

Ответ 5

Ответ C. Reference type is "Mobile", object type is "Truck" правильный. Хотя ссылка указывает на объект Truck в настоящий момент, его можно перемещать, чтобы указать на любой объект, который реализует Mobile или его суб-интерфейс. Таким образом, ссылочным типом является Mobile.

Ответ 6

Существует еще одно правило большого пальца, и оно выглядит примерно так:

Class_Name Reference_Variable = new Class_Constructor()

enter image description here

Итак, фрагмент кода

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

Здесь -

theTruck - это "ссылочная переменная" типа Truck и "Тип объекта" для грузовика

theVehicle - это "ссылочная вариация" типа Vehicle и "Тип объекта" ссылки "Удар", то есть Truck

theMobile является ссылочной переменной "типа Moble и" Тип объекта " ссылки" Транспорт ", которая является Грузовик.

Значит вариант C - правильный ответ.