If you are having different classes that should have the same methods like getWayPoint() (btw.: consider to use Java's naming conventions, i.e. methods and variables start lower case, Classes upper case etc. It'll make the code easier to read), you can either implement an interface or extend a common base class which itself extends Object3D. In either case, your list can be of that type and doesn't have to be of Object3D.
For example:
public interface Moveable {
int getWayPoint();
}
public class Enemy extends Object3D implements Moveable {
int getWayPoint() {
..... // some implementation for enemies
}
}
public class Rabbit extends Object3D implements Moveable {
int getWayPoint() {
..... // some implementation for rabbits
}
}
...
List<Moveable> worldStuff = new ArrayList<Moveable>();
...
That way, you don't have to cast. However, you can also do the way you've posted, i.e.
List<Object3D> worldStuff = new ArrayList<Object3D>();
for (Object3D obj:worldStuff) {
Moveable mv=(Moveable) obj;
int wayPoint=mv.getWayPoint();
}
The cast is cheap. It can't be responsible for the slow down. Maybe the slow down happens, because you are doing something expensive in getWayPoint() or with the returned way point. But the cast itself can't be responsible for it.