[英]Java constructor in agregation subclass
我最近學習了子類的用法,並且正在創建Java游戲。 我有一個超類CHARACTER,這是游戲的角色。 此類具有許多子類,例如SOLDIER和FARMER。 現在,我需要一個名為GROUP的子類,它是一堆字符。
超類構造函數如下:
public Character (String id,Position p);
如何創建子類GROUP的構造函數,該子類必須調用超級構造函數N次?
如何創建子類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是Character,那么您的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
}
}
您的組應該是數組,列表或類似名稱。 然后,您通過循環實例化。
CHARACTER[] group = new CHARACTER[10];
for (int c = 0; c < 10; c++) group[i] = new CHARACTER(id, position);
這樣,您還可以輕松訪問成員。 由於FARMERS和SOLDIERS被子類化為CHARACTER,
CHARACTER[] group = new CHARACTER[10];
for (int c = 0; c < 10; c++) group[i] = new SOLDIER(id, position);
也可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.