Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 深度&;狭窄的继承层次?_Java - Fatal编程技术网

Java 深度&;狭窄的继承层次?

Java 深度&;狭窄的继承层次?,java,Java,(这里是Java新手,如有任何回复,将不胜感激。) 我已经创建了一个游戏的实现,还有几个不同的AI在玩它。假设它们都使用相同的基本算法,比如蒙特卡罗树搜索(MCTS)。所有的人工智能都有这个共同的模板,但它们都有细微的区别。每个AI必须包含以前AI的修改,因为我必须展示我的进度 目前,我有一个接口,它定义了MCT所需的方法,还有一个抽象类,它定义了这些方法的实现,以执行普通的MCT(未优化)。我创建的第一个AI扩展了这个抽象类来定义一个具体的版本。然后,下一个AI扩展第一个AI并覆盖某些方法,以

(这里是Java新手,如有任何回复,将不胜感激。)

我已经创建了一个游戏的实现,还有几个不同的AI在玩它。假设它们都使用相同的基本算法,比如蒙特卡罗树搜索(MCTS)。所有的人工智能都有这个共同的模板,但它们都有细微的区别。每个AI必须包含以前AI的修改,因为我必须展示我的进度

目前,我有一个接口,它定义了MCT所需的方法,还有一个抽象类,它定义了这些方法的实现,以执行普通的MCT(未优化)。我创建的第一个AI扩展了这个抽象类来定义一个具体的版本。然后,下一个AI扩展第一个AI并覆盖某些方法,以某种方式修改算法行为。这种过程是重复的,因此每个AI都扩展了前一个,获得了之前的更改并定义了自己的更改


这创建了一个深而窄的继承层次结构,其结果是很难理解。有没有更好的方法来创建这些AI并更改继承层次结构?

继承的替代方法通常是组合,但您确实需要发布代码示例,以便人们提供适当的帮助。继承是Is a的关系:B类是a类。更简单的方法是组合,它使用的关系为has a。类B将有一个类A的实例,它可以在这个实例上调用方法。这给依赖项带来了一些复杂性,但完全消除了继承问题。要用一个例子来扩展@ZachChilders注释,一个
小妖精是一个
怪物
,因此它继承了
怪物
的属性,但是一个
Goblin
可能有一个
咒语
,该咒语将使用合成。与之相关的是,请查看策略模式并合成不同方法的AI。更多阅读其他人的解释。大多数情况下,继承的替代方法是组合,但您确实需要发布代码示例,以便人们提供适当的帮助。继承是is a的关系:类B是类a。更简单的方法是组合,它使用has a的关系。类B将有一个类A的实例,它可以在这个实例上调用方法。这给依赖项带来了一些复杂性,但完全消除了继承问题。要用一个例子来扩展@ZachChilders注释,一个
小妖精是一个
怪物
,因此它继承了
怪物
的属性,但是一个
Goblin
可能有一个
咒语
,该咒语将使用合成。与之相关的是,请查看策略模式并合成不同方法的AI。更多阅读其他人的解释。