Есть два интерфейса
public interface Creep {
void creep();
}
public interface Wriggle extends Creep {
void wriggle();
}
И 3 класса
public class Creature {
public void whoAmI(){
System.out.print("I'am Creature -");
}
}
public class Dog extends Creature implements Creep {
@Override
public void creep(){
System.out.println("Creep from Dog");
};
}
public class Snake extends Creature implements Wriggle {
public void wriggle(){
System.out.println("wriggle from Snake");
}
public void creep(){
System.out.println("creep from Snake");
}
}
Хочу создать массив состоящий из классов Dog, Snake. Как это правильно реализовать? Сделал следующее:
List<Creep> list = new ArrayList<Creep>();
list.add(new Snake());
list.add(new Dog());
list.get(0).creep();
list.get(0).wriggle();
Но на вызове wriggle() получаю ошибку компиляции, что этого метода нет, как тогда можно реализовать массив для этих объектов?
Дело в Generic. Так как вы указали List<Creep> list
с типом Creep
, то у вас get
и вернул Creep
. (Это возможно за счет того, что в Java можно делать так: Creep c = new Snake();
)
На самом деле внутри листа будет лежать просто Object
, а тип который вы указываете в <>
доступен лишь во время компиляции.
Если вы хотите получить объект правильного типа, нужно сделать так:
((Snake) list.get(0)).wriggle();
Но учтите, что восходящие преобразования - это плохо и их по возможности следует избегать.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть переменные экземпляра, переменные класса, локальные переменные, литералы, ссылочные типы, примитивные типы
Углубляю познания о джавеНаткнулся на статью о типах ссылок
В моём приложении на андроид я использую несколько звуков с помощью класса soundpool,теперь я хочу реализовать функцию записи звука внутри своего...