Ну, кастинг делает разные вещи в зависимости от того, о каких типах вы говорите. Рассмотрим:
Object x = "hello";
String y = (String) x;
Это не меняет тип объекта - но он преобразует ссылку типа Object
в ссылку типа String
, проверяя, что ссылка ссылается на String
(или, в более общем случае, на целевой тип приведения или подкласса) или на ноль.
Для примитивных типов фактически создает новое значение данных другого типа, изменяя скопированную информацию , а не просто изменяя ссылку на информацию:
double x = 10.5;
int y = (int) x; // The value of y is 10; x is unchanged though.
Относительно интерфейсов:
Imonitor[] x = new Imonitor();
Это не скомпилируется напрямую. Но это будет:
Imonitor[] x = new Imonitor[2];
Это не создает никаких экземпляров самого Imonitor
- это просто создание массива с двумя «слотами», способными хранить ссылки на объекты типов, реализующих Imonitor
. Начальное значение в обоих этих слотах будет null
; затем вы можете заполнить массив следующим образом:
x[0] = new FirstImplementation();
x[1] = new SecondImplemnentation();
... создание экземпляров конкретных классов реализации.