это расточительный / плохой дизайн - использовать вектор / список, где в большинстве случаев он будет иметь только один элемент?
пример:
class dragon
{
ArrayList<head> = new ArrayList<head> Heads;
tail Tail = new tail();
body Body = new body();
dragon()
{
theHead=new head();
Heads.add(theHead);
}
void nod()
{
for (int i=0;i<Heads.size();i++)
{
heads.get(i).GoUpAndDown();
}
}
}
class firedragon extends dragon
{
}
class icedragon extends dragon
{
}
class lightningdragon extends dragon
{
}
// 10 other one-headed dragon declarations here
class hydra extends dragon
{
hydra()
{
anotherHead=new head();
for (int i=0;i<2;i++)
{
Heads.add(anotherHead);
}
}
}
class superhydra extends dragon
{
superhydra()
{
anotherHead=new head();
for (int i=0;i<4;i++)
{
Heads.add(anotherHead);
}
}
}
РЕДАКТИРОВАТЬ: (часть 2 вопроса)
Спасибо за ответы. Они были очень полезны.
Я действительно сталкивался с этой ситуацией более одного раза, и я хотел бы привести второй пример, не связанный с наследованием. Это на самом деле пример из реальной жизни, и хотя я решил, что мой текущий проект достаточно мал, чтобы быть безопасным при использовании векторов, основанных на ваших ответах, я полагаю, что в некоторых случаях я буду использовать его в гораздо большем масштабе. точка.
Создавая движок для моего текущего игрового проекта для Android, я счел необходимым создать объект Imagepoint, который в основном представляет собой набор координат XY, которые используются для отслеживания значительных частей изображения спрайта. Допустим, у вас есть персонаж из кости, состоящий из нескольких растровых изображений, полезно знать, где шея прикреплена к туловищу, предплечье к бицепсу и т. Д. Эти данные смещения xy используются позже для расчета положения для различных целей, например, где позиционировать другие спрайты с помощью тригонометрических функций, чтобы найти смещение по оси x с учетом текущего угла.
Большинству спрайтовых объектов потребуется только одна точка изображения. Бицепсу нужен один для предплечья, предплечью нужен один для руки, шее нужен один для головы и т. Д. Туловища в моих нынешних моделях персонажей являются исключением, и им нужно несколько для плеч, ног, шеи и любые съемные декоративные спрайты.
Спрайт - это объект, который содержит векторы точек изображения, унаследованных классов не будет, потому что каждый: торс, нога и т. Д. Являются просто экземпляром класса спрайта, который является строго графическим объектом, содержащим указатель на растровое изображение, эти точки изображения и различные данные о положении / ориентации, и не будут использоваться для каких-либо специализированных целей. Если бы я использовал эту концепцию в крупномасштабной игре с огромным количеством экземпляров, где большинству потребовалась бы только одна точка изображения, с несколькими объектами, требующими нескольких или ни одного, и где не было бы особых случаев, заслуживающих использования наследования. Что бы вы подумали?