簡體   English   中英

聚合子類中的Java構造函數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM