Я работаю над заданием для моего класса объектно-ориентированного программирования.Я уже выполнил то, что требовалось для выполнения задания, поэтому на данный момент мы имеем дело с чистым любопытством (на случай, если в игре есть какие-то моральные дилеммы).
Я определил класс с именем Alien и получил от него тритипы инопланетян (для простоты назовите их красными, зелеными и синими).Я также определил класс с именем AlienPack, в котором хранится массив объектов Alien, с которыми должен сражаться какой-то персонаж.Идея состоит в том, что три производных класса, поскольку они имеют тип Alien, могут храниться в объекте AlienPack.Все это было необходимо для назначения.
Рассмотрим следующий метод в AlienPack:
/**
* Adds an Alien to AlienPack at the specified location
* @param newAlien An alien to add to the pack. Will be of type Red, Green, or Blue
* @param index index must be within the bounds of the AlienPack array
*/
public void addAlien(Alien newAlien, int index)
{
aliens[index] = newAlien;
}
Этот метод, очевидно, небезопасен.
Чтобы массив «пришельцы» мог содержать всех трех типов пришельцев, параметр «newAlien» должен иметь тип «Чужой».К сожалению, это означает, что я не могу использовать конструктор копирования для написания безопасного кода (насколько я знаю).
Мое намерение таково: я хочу создать из newAlien независимую копию, которая содержит все те же данные, что и newAlien, но в которой явно не указывается тип Alien newAlien.Класс Alien и производные классы Red, Green и Blue имеют конструкторы копирования.Я также знаю, основываясь на экспериментах, что newAlien знает о своем типе (например, если я вызову метод наподобие «printType» для newAlien, он не напечатает «Alien», а вместо этого напечатает «Blue» или «Green»).или "Красный").
Как я могу выполнить такую общую конструкцию?Я должен упомянуть, что я еще не рассмотрел полиморфизм и поэтому не могу использовать эти возможности языка.