Вы можете понижать объекты в Java, не объявляя новую переменную?

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

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 ответа

Решение

Да, вы можете опустить

((E)xyz).method();

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

Вы можете встроить типы типов, что экономит время при наборе текста, если вам нужно только один раз уменьшить значение:

Number n = 1;
((Integer)n).someIntegerMethod();

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

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

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

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

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

Тем не менее, вы можете сделать это:

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

Скобки вокруг Typecast имеют важное значение, потому что "." Оператор имеет более высокий приоритет, чем тип.

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

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

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

Другие вопросы по тегам