【发布时间】:2021-06-25 21:32:22
【问题描述】:
假设我有一个接口IMazeRoom
这个接口有一个函数getAdjacentRooms()
此外,Mazerooms 必须实例化为IMazeRoom room1 等。
(以上都不能改)
假设这些类正在实现接口:
TrapRoom, FreeRoom, MobRoom, TreasureRoom
我希望在所有这些子类中使用以下函数/变量
Players[] playersInRoom, setSize(), isAdditionValid(Player p)
我想在不修改接口或在四个子类中复制代码的情况下对上面的三个函数/变量使用继承。
到目前为止我已经尝试过什么
制作一个实现IMazeroom的抽象接口MazeRoom,由四个子类实现。这不起作用,因为这个项目的限制是房间必须被实例化为IMazeroom room,如果我想使用上面提到的新功能,这样做会导致实例化Mazeroom room。 IMazeRooms 也不能修改。
想法
我可能只是使用另一个接口来包含我想要包含的功能,这将由 IMazeroom 实现,但这似乎很奇怪,因为这个约束应该在这里教我一些东西,而且我看不到仅仅使用的价值另一个界面。此外,使用另一个接口并不能真正减少代码重复,我正在寻找更像抽象类的东西
(以上是与我的家庭作业完全不同的例子,因为我想自己尝试这个任务)
【问题讨论】:
-
为什么不能使用实现这些功能的抽象class Room?
-
如果我这样做:
abstract Room implements IMazeroom -> TrapRoom, FreeRoom....然后:IMazeRoom myroom = new MazeRoom();myroom.isAdditionValid(2);将显示:Cannot resolve method 'isAdditionValid' in 'IMazeRoom' -
打电话给班级
IMazeRoom很烦人......你说的abstract interface是什么意思?!而且,这个问题的可读性也很好,没有任何代码块。
标签: java oop inheritance multiple-inheritance