gpt4 book ai didi

java - 每当实例化类时如何实现该类的方法?

转载 作者:行者123 更新时间:2023-11-29 04:19:17 25 4
gpt4 key购买 nike

我正在尝试编写一个基本的星球大战游戏。目前我有一个类:

public class LightSaber extends SWEntity {

public LightSaber(MessageRenderer m) {
super(m);
this.shortDescription = "A Lightsaber";
this.longDescription = "A lightsaber. Bzzz-whoosh!";
this.hitpoints = 100000; // start with a nice powerful, sharp axe
this.addAffordance(new Take(this, m));//add the take affordance so that the LightSaber can be taken by SWActors
}

public void canWield(SWActor actor) {
if (actor.getForcepoints() >= minForcePoints) {
this.capabilities.add(Capability.WEAPON);// it's a weapon.
}
}

}

基本上,如果 Actor 有足够的力量,光剑 就是一种武器。但是当我像这样实例化 lightsaber 类时:

LightSaber bensweapon = new LightSaber(m);
setItemCarried(bensweapon);

显然 canWield 方法没有被调用。每次实例化类时如何调用该方法?我应该创建一个接口(interface) canWield 并实现它吗?


编辑:好的,这是我的setItemCarried() 代码:

public void setItemCarried(SWEntityInterface target) {
this.itemCarried = target;
}

最佳答案

显然,某些 SWActor 无法使用某些 SWEntityInterface(即 LightSaber)对象。我想你想在将它设置为携带的项目之前检查 this 是否可以使用 SWEntityInterface

您应该将方法 canWield(SWActor) 添加到 SWEntityInterface 并可选择提供返回 true 的默认实现。

interface SWEntityInterface {
boolean canWield(SWActor actor);
}

现在您在 setItemCarried 中调用它:

public void setItemCarried(SWEntityInterface target) {
if (target.canWield(this)) {
this.itemCarried = target;
}
}

请注意,我们没有更改 LightSaber 初始化时发生的情况,因为创建 LightSaber 的实例是完全可以的。您在此处试图控制的是设置 SWActor 无法作为其 itemCarried 携带的内容。

此外,考虑将 canWield 重命名为 canBeWieldedBy

关于java - 每当实例化类时如何实现该类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50308335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com