Java接口内部类

时间:2014-01-16 15:21:31

标签: java interface inner-classes

我还在用java编写战舰游戏 我在模块化方面遇到了麻烦:我需要用接口构建数据类(模型) 我得到的想法是建立一个这样的类层次结构:

BattleGrid =>一些方法,Grid => int rows,int cols,Cell [] [] grid => char内容

这意味着:
1.公共类是BattleGrid类(提供外部方法的类,如initGrid(),placeShip()等...);
2.然后在里面有另一个类,Grid,它包含材质网格和一些信息,如网格行和网格列;
3.在每个细胞内部,都有该细胞的内容 (显然所有人都有制定者和/或吸气者)

问题是:当我通过BattleGrid接口写这个时,内部类会自动声明为public static。

这种结构的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

这就是接口的工作原理。公共界面中的所有内容都是公开的。如果你有成员变量,它们将自动为静态。尝试使用抽象类或将成员变量移动到实现类。

答案 1 :(得分:0)

您的问题相当广泛,但我会尝试回答:最好尽量保持简单:

  • 使您的界面成为顶级课程(即在他们自己的文件中)
  • 除非必要,否则不要使用内部类(我怀疑它们是否适合这种情况)

答案 2 :(得分:0)

在设计界面时,请关注所需的外部功能,并完全忽略它的实现方式。

例如,如果您需要BattleGrid能够在外部提供Grid,则可以将它们声明为Grid getGrid();的单独接口作为BattleGrid中的方法{1}}。在编写BattleGrid实现时,您可以选择通过将Grid实现作为BattleGrid中的内部类来实现它,但这与BattleGrid接口没有任何关系。

如果您不需要BattleGrid从外部提供Grid,请不要在Grid界面中提及BattleGrid