Java:创建特定类

Java:创建特定类,java,class,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将是这

我有一个这样构造的类:

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将是这种生物的人工智能。我希望它能够像在里面一样完全访问该生物对象。我怎样才能做到这一点?通过某种巧妙的方式来继承它?

使AI成为生物的内部类将使AI能够访问生物的实例变量


请参阅:

您可以通过以下几种方式完成:

  • 包含:这就是您所做的,只是您应该将局部变量和类变量传递给AI方法(分离关注点等)。这也是我最喜欢的方法
  • 继承:只有在类之间存在关系时才有意义
  • 内部类:如果AI只与
    生物相关,并且不必直接与其他类交互,那么内部类是有意义的
  • 将类放在同一个包中,并将相关的访问修饰符设置为包私有
对第一种方法的改进是使用DI(依赖项注入)并将AI对象传递给构造函数,而不是在其中初始化对象(使用
new


我看到你在评论中加了一句:“我的类AI将处理许多生物的许多操作”。为了不让一个庞大的AI类与许多生物紧密耦合,我将创建一个AI接口和一个AIService,它将公开一个支持操作的接口。该服务将负责调用正确的AI实现(每种生物类型)来处理操作。

您可以将其放在同一个包中,并使其成为本地包。我认为使用继承不是一个好主意。我会喜欢在开始时添加类似于
c.
的内容来显示它就是生物。你的意思是以这样的方式访问这些字段:
creative.field
<代码>生物
将是对调用
AI
类的对象的引用。但是。。。丑陋…也许,但它很简单,而且很有效。它说我指的是另一个物体,它是一个生物。是的,你是对的,但我的AI类将处理许多生物的许多操作,因此会有对
生物的恐惧。
调用。