Java 聚合子类中的构造函数
Java constructor in agregation subclass
我最近学会了 subclasses 的使用,我正在创建一个 Java 游戏。
我有一个 superclass CHARACTER,它是游戏的角色。这个 class 有很多子class,比如 SOLDIER 和 FARMER。现在我需要一个subclass 叫GROUP,就是一堆字符。
超级class构造函数如下:
public Character (String id,Position p);
如何创建子class GROUP的构造函数,它必须调用N次超级构造函数?
How can I create the constructor of the subclass GROUP, which has to call the super constructor N times?
你不能。而且你不需要。
每个Javaclass都有一个superclass。而一个class的每个对象只有它的superclass.
的一个状态
幸运的是,您的组 class 不需要 调用超级构造函数 N 次。一个组是否是一个字符。如果是Character,就是一个个字符。您调用 Group 的超级构造函数一次。
无论如何,组 包含 个字符。 Soldier 或 Farmer 的超级构造函数是从 Soldier 或 Farmer 的构造函数中调用的——而不是从包含该角色的 Group/s 中调用的。
例如,您的 Farmer class 可能如下所示:
public class Farmer extends Character {
public Farmer(String id,Position p) {
super( id, p ); // <-- Superclass constructor for one farmer.
...
}
...
}
你的组 class 可能看起来像这样,如果组是角色:
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);
也可以。
我最近学会了 subclasses 的使用,我正在创建一个 Java 游戏。 我有一个 superclass CHARACTER,它是游戏的角色。这个 class 有很多子class,比如 SOLDIER 和 FARMER。现在我需要一个subclass 叫GROUP,就是一堆字符。
超级class构造函数如下:
public Character (String id,Position p);
如何创建子class GROUP的构造函数,它必须调用N次超级构造函数?
How can I create the constructor of the subclass GROUP, which has to call the super constructor N times?
你不能。而且你不需要。
每个Javaclass都有一个superclass。而一个class的每个对象只有它的superclass.
的一个状态幸运的是,您的组 class 不需要 调用超级构造函数 N 次。一个组是否是一个字符。如果是Character,就是一个个字符。您调用 Group 的超级构造函数一次。
无论如何,组 包含 个字符。 Soldier 或 Farmer 的超级构造函数是从 Soldier 或 Farmer 的构造函数中调用的——而不是从包含该角色的 Group/s 中调用的。
例如,您的 Farmer class 可能如下所示:
public class Farmer extends Character {
public Farmer(String id,Position p) {
super( id, p ); // <-- Superclass constructor for one farmer.
...
}
...
}
你的组 class 可能看起来像这样,如果组是角色:
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);
也可以。