2011-08-05 2 views
0

Это изменяет один объект на другой? if Imonitor - это интерфейс, что означает Imonitor[] x = new Imonitor();? Означает ли это, что мы можем создавать объекты интерфейсов?Что такое приведение типов в Java?

+0

Вы не можете напрямую создать интерфейс. – Paul

ответ

1

Смена одного объекта на другой?

(1) Нет. Для ссылочных типов

a = (typename)b; 

сообщает компилятору, что вы «знаете», что объект, который «б» указывает также объект «TypeName» типа. То есть, это оператор поверх ссылок, а не объекта. (Для примитивных типов это фактически преобразование).

, если Imonitor представляет собой интерфейс, что делает IMonitor [] х = новый IMonitor(); означает?

(2) Не скомпилировать. Imonitor - это имя типа. Imonitor [] - это массив IMonitors.

Означает ли это, что мы можем создавать объекты интерфейсов?

(3) Нет, но вы можете создать массив ссылок на Imonitor, что и

new IMonitor[3] 

будет делать.

+2

Рассмотрите возможность расширения по различным темам. –

1

если Imonitor - это интерфейс, чем new Imonitor(); не работает.

Imonitor[] x - Imonitor -array не Imonitor переменная.

1

новый Imonitor() не будет работать, если Imonitor - это интерфейс - вы получите ошибку компиляции.

Чтобы создать объект, необходимо изменить тип, который компилятор считает объектом (статическим), и выполняет проверку. Когда программа запускается, JavaVm проверяет, что акты действительны, если не выбрано исключение.

Интерфейсы никогда не могут быть объектами, у вас должен быть класс, который реализует для этого интерфейс.

1

Как говорили другие (и я сделал это в своем комментарии), вы не можете напрямую создавать интерфейс. Я предлагаю вам ознакомиться с интерфейсами Java, чтобы они стали более знакомы с ними - они могут сбивать с толку сначала, но они являются важной частью языка.

Here is the section на интерфейсах в учебниках по Java.

3

Ну, кастинг делает разные вещи в зависимости от того, о каких типах вы говорите.Рассмотрю:

Object x = "hello"; 
String y = (String) x; 

Это не меняет типа объекта - но это преобразование ссылки типа Object к ссылке типа String, проверяя, что ссылка либо относится к String (или, в более общем плане, целевого типа броска или подкласса) или null.

Для примитивных типов, он на самом деле делает создать новое значение данных другого типа, изменяя информации скопированной, а не просто изменить ссылку на информацию:

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(); 

... создание экземпляров конкретных классов реализации.

0

Typecasting также известен как type conversion, он предназначен для изменения объекта из одного типа данных в другой. В не примитивных объектах приведение типов выполняется на объекты, имеющие определенные особенности иерархии. Пример: Person объекта 2 подклассов называются Parent и Child (оба подклассы имеют одинаковую hierchical структуры, поскольку они наследуют Person), следовательно, это правильный тип преобразование:

Person person = new Parent(); 
Parent parent = (Parent) person; 

Для примера, Imonitor[] x = new Imonitor(); не компилируются, как вы присваиваете единый объект Imonitor экземпляру, который ожидает массив из Imonitor.

Но это будет составлять:

Imonitor[] x = new Imonitor[2]; //Assigning 2 elements to array 'x' 

Предположим, что у вас есть интерфейс:

public interface IMonitor { 

    public void monitor(Monitorable object) throws MonitorException; 
} 

Тогда это не будет тип литья пример, но назначение:

IMonitor x = new IMonitor() { 
      public void monitor(Monitorable object) throws MonitorException { 
       //Implementation done here... 
      } 
     }; 

(Приведенный выше пример демонстрирует anonymous class).

Я надеюсь, что это ясно.

Смежные вопросы