In the sense of nvi (non-virtual-interfaces), please don't make setters virtual, but introduce a protected virtual method onProjectileNameChanged()  called by setProjectileName()