这是使用java关键字"interface"的正确位置吗?

Rel*_*ual 3 java interface keyword

我对Java很新.在阅读了一些关于路径查找的信息后,我读到了使用空类作为" interface"的未知对象类型.

我正在开发一个基于医院主题的Java游戏.到目前为止,用户可以建立一个接待台和一个GP的办公室.它们是两种不同类型的对象,一种是a Building,一种是a ReceptionDesk.(在我的班级结构中.)

我的班级结构如下:

GridObject-->Building
GridObject-->Item-->usableItem-->ReceptionDesk.
Run Code Online (Sandbox Code Playgroud)

当可用项目可以旋转而建筑物不能旋转时会出现问题.鼠标单击事件位于网格上,因此调用相同的方法.GP的办公室是一个Building,接待处是一个ReceptionDesk.只有ReceptionDesk有方法rotate.右键单击网格时,如果处于构建模式,我必须使用此"if"语句:

if (currentBuilding.getClass.equals(ReceptionDesk.getClass)
Run Code Online (Sandbox Code Playgroud)

然后,我必须创建一个新的ReceptionDesk,使用该rotate方法,并把接待台放回去currentBuilding GridObject.

我不确定我是否正在用这个问题解释自己.抱歉.我还是Java新手.我将尝试回答任何问题,如果需要,我可以发布更多代码snippits.我不知道可能有一种方法可以解决不知道对象类的问题,但是我也可能以错误的方式进行.

在我看到这个网站上的回复有多快和有帮助之前,我没有计划对此进行调查!:)

提前致谢.

相对

Joh*_*ood 7

在您的案例中使用它之前,您不希望检查对象的类.你应该使用多态.您希望让Interface定义一些方法.每个类都实现这些方法.通过其接口引用对象,并让这些对象的各个实现将其值返回给调用者.

如果你描述了一些你认为需要的对象,那么这里的人就会对你如何解决它们提出意见.但是根据您提供的内容,您可能需要一个"构建"界面来定义一些常规方法.您可能还需要"UsableItem"界面或更通用的界面.医院可以是一个实施建筑的阶层.ReceptionDesk可以实现UsableItem.建筑物内部可能有一个UsableItem网格.

如果rotate()是实际完成某些工作的所有家具的常用方法,您可以考虑创建一个AbstractUsableItem类,它是一个实现UsableItemand的抽象类,提供rotate()方法.如果旋转是在每个实现类不同,你就必须在接口方法,但是每一类,像ReceptionDesk会做自己的事与rotate()方法.您的代码将执行以下操作:

UsableItem desk = new ReceptionDesk();
desk.rotate()
Run Code Online (Sandbox Code Playgroud)

在你的例子,如果你的鼠标点击屏幕上旋转的对象下它,你真的需要检查,看看是否对象可以做这样的事情之前旋转,你会怎么做

if (clickedObject instanceOf UsableItem) {
  ((UsableItem) clickedObject).rotate();
}
Run Code Online (Sandbox Code Playgroud)

UsableItem是接口或抽象类.有些人认为所有设计都应该通过接口合同完成,并为每种类型的类建议一个接口,但我不知道你是否必须走得那么远.