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);

也可以。