// сначала отводим место под массивы
allPiles = new CardPile[13];
suitPile = new SuitPile[4];
tableau = new TablePile[7];
// затем заполняем их данными
allPiles[0] = deckPile = new DeckPile(335, 5);
allPiles[1] = discardPile =
new DiscardPile(268, 5);
for (int i = 0; i < 4; i++)
{ allPiles[2+i] = suitPile[i] =
new SuitPile(15 + 60 * i, 5);
}
for (int i = 0; i < 7; i++)
{ allPiles[6+i] = tableau[i] =
new TablePile(5 + 55 * i, 80, i+1);
}
}
public void paint(Graphics g)
{
for (int i = 0; i < 13; i++)
{ allPiles[i].display(g); }
}
public boolean mouseDown(Event evt, int x, int y)
{
for (int i = 0; i < 13; i++)
{
if (allPiles[i].includes(x, y))
{ allPiles[i].select(x, y);
repaint();
return true;
}
}
return true;
}
}
показывает только то, что объекты являются массивами; про их границы ничего не
говорится. Один из первых шагов процедуры инициализации — выделение места под три
массива (основания, стопки расклада и массив allPiles, который мы рассмотрим ниже).
Команда new отводит память для этих массивов, но не присваивает никаких значений их
элементам.
Следующий шаг — создание колоды DeskPile. Вспомните, что конструктор этого
класса генерирует и перетасовывает полную колоду из 52 карт. Промежуточная стопка
DiscardPile создается аналогичным образом. Затем в цикле порождаются и
инициализируются четыре основания SuitPile, а второй цикл создает и инициализирует
стопки расклада TablePile. Вспомните, что при инициализации стопок расклада карты
берутся из колоды и вставляются в стопку расклада.
Массив allPiles используется для представления всех 13 стопок карт. Заметьте, что как
только создается очередная стопка, ей тут же присваивается ячейка в этом массиве, равно
как и соответствующая статическая переменная. Мы воспользуемся этим массивом для
иллюстрации еще одного аспекта наследования. Следуя принципу подстановки, allPiles
объявлен как массив из элементов с типом данных CardPile, но на самом деле он содержит
стопки карт разнообразного вида.
Данный массив используется в ситуациях, когда различия между типами стопок карт
не важны. Например, в процедуре перерисовки экрана каждую стопку просто просят
самостоятельно перерисовать себя. Похожим образом при щелчке мышью опрашивается
PDF created with pdfFactory Pro trial version www.pdffactory.com