ну ок, имеется чувак, который может стрелять, и классы для каждого вида оружия(в них переопределен метод fire, который является виртуальным в базовом), теперь этому чуваку подсовываем оружие и если подсовываем нож, то метод fire для ножа режет, если гранату, то метод fire - бросает