Proper Separation of Logic When Casting?

Interfaces provide an appropriate means to affect changes in objects that have no relationship to one another.

As a rule of thumb i always go by “Objects should manage themselves”. In your example you are correct in saying that it is more appropriate for the Cube to decide what to do when it is hit by a Bullet, not the Bullet deciding what to do for the Cube. The only thing that they should end up sharing at that instance would be the Event Hit.