Java:创建一个特定的类

时间:2014-05-17 18:01:30

标签: java class

我有一个像这样构建的类:

public class Creature
{
    protected final AI ai;
    // ...about 10 other objects

    public Creature (CreatureType type, int x, int y)
    {
        ai = new AI ();
        // some other code
    }

    // ... many methods
}

我的班级AI将是该生物的人工智能。我希望它能够完全访问Creature对象,就好像它在里面一样。我怎么能实现这一目标?通过一些狡猾的方式继承它?

2 个答案:

答案 0 :(得分:1)

使AI成为Creature的内部类将允许AI访问Creature的实例变量。

请参阅:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

答案 1 :(得分:0)

您可以通过以下几种方式实现:

  • 包含:这是你所做的,只是你应该将局部变量和类变量传递给AI方法(关注点分离等)。这也是我最喜欢的方法。
  • 继承:只有在类
  • 之间存在关系时才有意义
  • 内部课程:如果AI仅与Creature相关且无需直接与其他课程互动,则有意义
  • 将类放在同一个包中,并将相关的访问修饰符设置为package-private

对第一种方法的改进将是使用DI(依赖注入)并将AI对象传递给构造函数,而不是在其中初始化对象(使用new)。

我看到你在评论中添加了:"我的班级AI将为许多生物处理许多操作"。为了不让最终的AI类与许多生物紧密结合,我会创建一个AI接口和一个AIService,它将公开一个支持操作的接口。该服务将负责调用正确的AI实现(按生物类型)来处理操作。