作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了稍微玩一下,我正在尝试通过命令行制作一款由两名玩家组成的回合制战斗游戏。每个玩家控制一个怪物,最多有 4 个不同的 Action 。我定义了 Monster 和 Move 类来定义不同的怪物和 Action 。当玩家使用招式时,我想我想在招式中调用类似 performOn(Monster mon) 的方法来使用。在那个方法中,我想定义移动的实现,因为不是每个移动都会做同样的事情。我很确定 Java 可以做到这一点,但我不完全确定它是如何完成的。对于 Monster 和 Move 类,我都有一个内部 Builder 类来避免大的构造函数方法。如果有人对如何执行 Action 有更好的想法,请随时分享。 :)
谢谢!
例子:
// moves is a HashMap<String, Move>
monster1.moves.get("Firebreath").performOn(monster2); // damages monster2
monster2.moves.get("Heal").performOn(monster2); // heals monster2
最佳答案
您可以为 Move
创建一个父类(super class),所有特殊 Action 都可以扩展它:
public abstract class Move
{
public abstract void performOn(Monster m);
}
然后扩展:
public class FirebreathMove extends Move
{
public void performOn(Monster m)
{
// do something to Monster
}
}
或者你可以创建一个接口(interface):
public interface Move
{
public void performOn(Monster m);
}
你的 Action 可以实现它:
public class FirebreathMove implements Move
{
public void performOn(Monster m)
{
// do something to Monster
}
}
在任何一种情况下,您都会引用一个可以调用performOn(Monster)
的Move
,但这取决于是否所有的移动都具有某种共同点您想要子类化的功能(第一个方法,带有父类(super class))或者如果 Moves 也可以是其他东西,您只需要 performOn(Monster)
方法签名。例如,如果你有类似武器的东西,它有一个移动:
public class FancyWeapon extends Weapon implements Move
{
}
关于java - 如何为一个方法定义多个实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11876231/
我是一名优秀的程序员,十分优秀!