Adding abstract class weapon and changing class hierarchy