2016-12-07 5 views
0

Я недавно узнал об использовании подклассов, и я создаю Java-игру. У меня есть суперкласс CHARACTER, который является характером игры. Этот класс имеет много подклассов, таких как SOLDIER и FARMER. Теперь мне нужно иметь подкласс GROUP, который представляет собой кучу символов.Java-конструктор в подклассе agregation

конструктор суперкласса следующее:

public Character (String id,Position p); 

Как я могу создать конструктор подкласса GROUP, который должен назвать супер конструктор N раз?

+0

Вам не нужен подкласс для группировки объектов, вы можете использовать «Список». – Maroun

+0

Проблема в том, что я должен сделать это таким образом. –

ответ

1

Как я могу создать конструктор подкласса GROUP, который должен вызвать супер конструктор N раз?

Вы не можете. И вам не нужно.

Каждый класс Java имеет ровно один суперкласс. И каждый объект класса имеет только одно состояние своего суперкласса.

К счастью, ваш класс группы не должен называть супер конструктор N раз. Либо группа является персонажем, либо нет. Если это персонаж, то один персонаж. Вы вызываете супер конструктор группы один раз.

Независимо от того, Группа содержит символов. Супер конструктор Солдата или Фермера вызывается из конструктора для Солдата или Фермера, а не из группы /, которые содержат символ.

Например, ваш класс Farmer может выглядеть следующим образом:

public class Farmer extends Character { 
    public Farmer(String id,Position p) { 
     super(id, p); // <-- Superclass constructor for one farmer. 
     ... 
    } 
    ... 
} 

И ваш класс Group может выглядеть следующим образом, если группа является Характер:

class Group extends Character { 
    private Collection<Character> m_members; 
    Group(String id,Position p, Collection<Character> members) { 
     super(id, p); // Superclass constructor for the *group*. 
     m_members = new ArrayList<>(members); // Defensive copy 
    } 
} 

Или это, если это не.

class Group { 
    Group(Collection<Character> members) { 
     m_members = new ArrayList<>(members); // Defensive copy 
    } 
} 
0

Ваша группа должна скорее быть массивом, списком или подобным. Затем вы создаете экземпляр через цикл.

CHARACTER[] group = new CHARACTER[10]; 
for (int c = 0; c < 10; c++) group[i] = new CHARACTER(id, position); 

Таким образом, вы также можете легко получить доступ к членам. Becaues FARMERS и солдаты подклассы в ХАРАКТЕР,

CHARACTER[] group = new CHARACTER[10]; 
for (int c = 0; c < 10; c++) group[i] = new SOLDIER(id, position); 

Будет также работать.

 Смежные вопросы

  • Нет связанных вопросов^_^