Вы можете уменьшить объекты в Java, не объявляя новую переменную? - PullRequest
2 голосов
/ 31 января 2011

Я пытался сделать что-то вроде

class O has a child E

Я объявляю переменную

O xyz = new E();

но затем, если я вызову xyz.method (), я могу вызвать только те методы класса O, а не E, поэтому я могу уменьшить его на

E xyz2 = (E) xyz;

Мой вопрос: можете ли вы сделать это без объявления новой переменной? Что-то вроде:

O xyz = new E();
xyz = (E) xyz; 

и теперь я могу использовать xyz.method () для вызова методов E

Есть ли способ сделать это в Java?

Ответы [ 4 ]

7 голосов
/ 31 января 2011

да, вы можете опустить вниз

((E)xyz).method();
1 голос
/ 31 января 2011

Нет, вы не можете изменить тип переменной после того, как она объявлена.

Вы можете встроить типы трансляций, что экономит некоторую типизацию, если вам нужно только один раз уменьшить значение:* Вам, вероятно, следует создать новую переменную, если вам нужно сделать это более одного раза.В противном случае компилятор может быть или не быть достаточно умным, чтобы оптимизировать это должным образом (и это повлечет за собой накладные расходы времени выполнения при повторном приведении классов).

0 голосов
/ 31 января 2011

Вы не можете сделать это так:

O xyz = new E();
xyz = (E) xyz; 
xyx.someEMethod(); // compilation error

Причина в том, что типы типов объектов Java фактически не меняют никаких значений. Скорее, они выполняют проверку типа по фактическому типу объекта.

Ваш код проверяет, что значение xyz является E, но затем присваивает результат приведения типа обратно к xyz (второй оператор), таким образом снова возвращая его к O.

Однако вы можете сделать это:

((E) xyx).someEMethod(); // fine

Круглые скобки вокруг типа являются существенными, потому что "." Оператор имеет более высокий приоритет, чем тип.

0 голосов
/ 31 января 2011

если у родительского класса (O) также есть метод xyz, вы можете просто вызвать

O xyz = new E();
xyz.method();   // E's xyz would be called

Это полиморфизм

...