我想开始说Stack Overflow是一个巨大的帮助,只是从查找其他人的问题,但是对于这个问题,我很难找到解决方案,因为很难说出一个问题。
我正在用Java制作2D平台透视射击游戏,所以我有一套创建子弹的功能。示例:
public void CreateShot01(x, y, angle, velocity, bulletID, delay){
/*...will do a bunch of stuff ultimately creating a object in the Projectiles[]
array, which will be drawn on screen from the Board Object/Class*/
}
这个功能里面的内容不是问题。我希望这个和其他类似的功能可用于多个类,基本上适用于任何需要拍摄的类。我不想将此函数复制粘贴到使用它的每个类中。所以我将所有函数放在一个单独的类BulletHandler中会有所帮助,这将是标准的。
但是如何从所有需要它们的类中引用这些函数。我不确定使用的是否是:
-import?似乎是最合乎逻辑的解决方案,但是如何导入自己的东西呢?
-extends? AFAIK,这涉及超级和覆盖功能,而不是我需要的功能
最好的方法是什么?
我不知道要提供什么信息,所以如果有任何需要添加的话就提一下,我马上就会这样做。
答案 0 :(得分:4)
尝试将对象映射到物理现实。所有拍摄的东西都应该继承自抽象类,比如AbstractGun,它应该包含瞄准,射击,加载等背后的基本思想。因此这部分可以通过继承来解决。然后,如果一个角色需要拍摄某些东西,他将需要获得一个像枪一样的物体。因此,问题的这一部分是通过构图来解决的 - 射手不是从AbstractGun派生出来的(他没有履行“is-a”关系),但必须拥有一个继承自AbstractGun的对象,从而实现了“具有 - “枪支关系。”
答案 1 :(得分:1)
你的条款令人困惑。
导入仅用于引用另一个包中的文件,而无需在代码中添加其所有包层次结构。没什么。
只要你说,这是子类化('extends')的经典例子。创建一个实现shoot()的“父”类;拍摄的所有物体都从中延伸出来。他们只需要调用shoot()来使用它,而不必提供不同的实现(除非你想)。
当然,可能存在问题(如果有两种方法会发生什么,并且使用它们中的任何一种的类不会重叠?),但除此之外,你应该扩展一个主类。
BTW,添加“家庭作业”标签
添加回答海报的评论:
检查抽象类。它们意味着它们不能被实例化(你不能创建它们的“新”)并且它们可以有一些抽象方法,你知道签名(参数,返回类型)但不提供实现。您可以完全实现其他方法。
此外,可以扩展常规的“非抽象”类并添加新方法...请回到Java基础知识来调整您的概念(不要担心,我们所有人都会经历学习尝试的模式 - 回过头来学习我们知道它意味着什么。)
答案 2 :(得分:0)
您正在寻找抽象类或接口(实现)。
另一件事是你可能想做而不是做“CreateShot01”,“CreateShot02”等等是这样的:
public void globalShoot (int limit, type? x, type? y, type? angle, type? velocity, type? bulletID, type? delay) {
for (int i = 0; i < limit; i++) {
this.wait(delay);
doShooting(x, y, angle, velocity, bulletID);
}
}
或类似的东西。 :)