我应该存储Arraylist还是扩展它?

时间:2014-07-15 17:15:55

标签: java arraylist

我正在制作游戏,它使用网格 我可以通过扩展arraylist来实现它 例如:

public class Grid extends ArrayList<ArrayList<obj>> 
{
     public void addObj(Obj obj ,int x, int y)
     {
           get(x).set(y,obj);
     }
}

或者我应该通过存储来实现它

public class Grid
{
      private ArrayList<ArrayList<obj>> objs = new ArrayList<...>();

       public void addObj( Obj obj, int x, int y)
       {
          objs.get(x).set(y,obj);
       }
}

帮助PLZ

3 个答案:

答案 0 :(得分:3)

后者,构成方法。 ArrayList是您现在选择实现Grid的方式,但您可能希望将来使用Map或其他List类型。

另外,一些ArrayList的方法在Grid的上下文中可能毫无意义,例如:子列表。

答案 1 :(得分:1)

在这种情况下,最好使用组合而不是继承。您只应使您的类从ArrayList(或Java Collection Framework中的任何其他类)扩展,以防您需要更改该类的特定行为,如add方法。

顺便说一句,您应该将变量声明为List而不是ArrayList。始终面向接口而不是特定的实现类。

代码应如下所示:

public class Grid {
    private List<List<obj>> objs = new ArrayList<List<obj>>();
    public void addObj( Obj obj, int x, int y) {
        objs.get(x).set(y,obj);
    }
}

更多信息:

答案 2 :(得分:1)

Grid是否满足以下要求: Grid-is-a-ArrayList ?我不会说。

在这种情况下,我更愿意使用构图。您的网格将为列表提供完全不同(更丰富?)的界面。

请注意,如果您确实需要List语义,则可以在java.util.List上实现接口Grid,而无需实际继承实现。这将为您提供所需的合同,但将实施留给您(无论您是否选择委托真实的名单......)