[英]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.