Hm, now we have a problem with collisionfilter by inheritance. I can't sublcass collisionfilterable because the ship/bullet can't extend a different implementation of it. I can think of 2 solutions: don't inherit collisionfilterable, rename it to collisionfilter and make it a member, that can be replaced with a different implementation (preferred). Stay with the current inheritance approach were the default creator is null and can be overriden for everything that gets shot by a worldobject. Both implementation still require the creator() method to exist if you don't want to implement more complicated double dispatch checks.