Java 在GridWorld中扩展GUI中的一个类而不更改使用它的其他类

Java 在GridWorld中扩展GUI中的一个类而不更改使用它的其他类,java,extends,performance,gridworld,Java,Extends,Performance,Gridworld,我想更改GridWorld GUI的DefaultDisplay类,这样我就可以在运行期间更改参与者的图像,因为我使用了代码的jar文件,所以我正在创建DefaultDisplay的子类CustomDisplay 但是,由于创建子类会更改名称,因此我必须创建使用DefaultDisplay的类的子类,以便将它们更新为使用CustomDisplay而不是DefaultDisplay。例如,我必须创建名为CustomMap的DisplayMap的子类,而不是此子类: private Display

我想更改GridWorld GUI的
DefaultDisplay
类,这样我就可以在运行期间更改参与者的图像,因为我使用了代码的jar文件,所以我正在创建
DefaultDisplay
的子类
CustomDisplay

但是,由于创建子类会更改名称,因此我必须创建使用
DefaultDisplay
的类的子类,以便将它们更新为使用
CustomDisplay
而不是
DefaultDisplay
。例如,我必须创建名为
CustomMap
DisplayMap
的子类,而不是此子类:

private Display defaultDisplay = new DefaultDisplay();
他说:

private Display customDisplay = new CustomDisplay();
然后,使用
DisplayMap
的任何其他类都必须更改为使用
CustomMap
。仅仅因为这些类使用了我修改过的类,所以创建所有这些类的子类似乎效率很低

是否可以使
CustomDisplay
自动使用,而不是
DefaultDisplay
,这样我只需更改一个类

笔记
  • 我所说的课程并不正常,但可以找到
  • 我查了一下,发现了很多信息,但没有任何有用的信息

  • 这个问题似乎很陈腐,但我认为一个通用的答案可以帮助任何找到它的人

    问题是关于GridWorld,一个用于教学的简单框架

    OP希望进行特定更改,通过引入新的显示类来解决未说明的问题,但无法更改现有类。因此,问题变成了如何引入新的显示类

    应用面向对象思想。框架是否支持引入新的显示类? 我们应该检查文档,如果失败,请检查框架的公共类接口:是否有任何方法可以设置显示?我们可以检查网格、参与者,或者其他使用这些的人

    不管OP怎么说,有一个明确的声明(其中@Andrew Thompson说)解决了这一要求:

    “渲染算法如下所示:

  • 检查是否有一个类的名称是添加了后缀Display的类的名称,并且该类实现了info.gridworld.gui。 显示接口。如果是,则调用其draw方法。这与MBS案例研究中使用的机制相同。(如果决定提供此类,则应扩展自动处理缩放和旋转的便利类info.gridworld.gui.AbstractDisplay。)
  • 这就是解决这个问题所需要的

    这里有一些“经验教训”

  • 如果您正在阅读似乎相关的文档(在本例中,它提到了显示界面),但您不理解它,那么请调查它,直到您理解为止

  • 如果你对问题解决方案的想法遇到困难,在投入太多精力之前,回去重新评估引导你到达那里的道路上的分支

  • 你的老师(在这样一个低水平的科目中)不会设置不可能的任务(除非他们编造了大量的东西)。所以2。适用

  • 这与调试有关:我们最难的bug来自于我们不知道自己做出的假设。我们可能是出于懒惰的思考或无知。因此,重新思考并了解所涉及的技术和技术。在你试图改变它之前,先了解发生了什么


  • 继承的整个思想是您的
    CustomDisplay
    类是一个
    DefaultDisplay
    ,因此其他类都不需要知道您已经对它进行了子类化。因此,不需要创建任何其他类的子类。BTW-请参阅。另外,中没有列出
    DefaultDisplay
    。我首先检查了扩展GridWorld,发现了很多信息,但没有任何帮助。官方文件中没有列出GUI。可以找到