The problem with instanceof is bad seperation of logic.
You already have a class called Enemy, so i dont know why you are talking about new classes.
if (other instanceof Enemy)
could be changed to:
This way the logic of the object stays in the object itself, instead of random refrences in some classes to make up propertys.
One time instanceof would not seem bad, but it will keep creeping into other classes if you keep used to it.
Also, when you want to add fucntionality, like blinded enemys (not able to hit), you need to update all these instanceof Enemy references to something like:
if (other instanceof Enemy && !((Enemy)other).isBlinded())
Feels a lot worse right?
What if we expand this even more:
if ((other instanceof Enemy && !((Enemy)other).isBlinded()) || (other instanceof Player && ((Player)other).hasRage()) || (other instanceof Rock && ((Rock)other).isEvil()) || (other instanceof Turret && ((Turret)other).isActivated()))
Best practise is to make Instances from classes as less known as possible.