Вопрос о типе объекта - PullRequest
       5

Вопрос о типе объекта

2 голосов
/ 23 ноября 2010

Я изучаю Java и у меня есть вопрос о типах объектов.

В качестве примера возьмем следующее:

class A { }

class B extends A { }

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

Каков приемлемый способ описания типа myObject?

Вы бы сказали, что это Тип A, Тип B или Тип A и B?

Спасибо.

Ответы [ 4 ]

6 голосов
/ 23 ноября 2010

myObject является ссылкой типа A (ваша переменная объявлена ​​типа A).

Сам объект, на который ссылается myObject, имеет типB.Экземпляр имеет тип B.

Это вопрос контекста и фокуса.Когда вы используете myObject в других местах, вы можете не знать, что это экземпляр класса B, только что он имеет тип A.

1 голос
/ 23 ноября 2010

myObject - это поле с объявленным типом времени компиляции A. Во время выполнения оно будет ссылаться на объект типа B.

Это различие между объявленным типом (или временем компиляции) переменныхи тип объектов во время выполнения крайне важен для понимания того, как полиморфизм работает в статически типизированном языке, таком как Java.Некоторые вещи (например, вызов переопределенных методов) определяются типом времени выполнения, другие (например, вызов перегруженных или статических методов) типом времени компиляции.

В общем: объявленный тип определяет, что выможно делать с объектом, тогда как тип среды выполнения определяет, как он будет себя вести.

1 голос
/ 23 ноября 2010

Он относится к типу A, поскольку тип означает операции, которые вы можете выполнять с ним, но он является экземпляром B, поэтому все операции, которые вы выполняете, будут выполняться в форме B.

0 голосов
/ 23 ноября 2010

Наследование подразумевает отношение "является" - экземпляр подкласса является экземпляром суперкласса.В вашем примере, поскольку B расширяет A, экземпляр B также является экземпляром A - поэтому вы можете присвоить новый B переменной типа A без приведения.

Переменная myObject имееттип A, но это относится к объекту, который действительно имеет тип B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...