Foreach через разные объекты, но все реализуют один и тот же интерфейс?

Предположим, у меня есть это

interface Movable
{//some stuff}

И у меня есть

class Car implements Movable
{//some stuff}

И также, возможно, у меня есть

class Bike implements Movable
{//some stuff}

Я заметил, что если бы у меня было это:

ArrayList<Movable> movableThings = new ArrayList<Movable>();
movableThings.add(some kind of Car)
movableThings.add(some kind of Bike)
movableThings.add(some kind of Bike)

Это можно вызвать:

for(Movable m: movableThings)

Но если я назову это, я получу несовместимые типы:

for(Bike b: movableThings)

Может кто-нибудь объяснить и, может быть, предложить лучший способ? Я знаю, что могу использовать foreach Movable m: movableThings, а затем использовать instanceof для проверки байков, но есть ли другой способ?

Edit: хорошо, спасибо за разъяснения, ребята ...поэтому я думаю, что я либо использую instanceof, либо переделываю свою игру

6
задан razlebe 9 June 2011 в 17:33
поделиться