我正在尝试为游戏创建角色类.
关于角色类: - 它有不同的角色,例如战士,射手,国王. - 每个都有不同的属性,例如攻击,防御.
我的问题是我应该使用继承还是合成?我有一个Character Class,那么我应该创建warrior类并扩展字符类,还是应该在Character类中添加一个像String ID ="Warrior"这样的标识符?
如果有一个属性组合的选项(例如,如果你有一个WarriorKing类),我会做的是为类+接口使用继承.
如果你想在WarriorKing之类的东西中享受这两种类型的属性,你可以做类似的事情:
class Character { ... }
interface Warrior {...}
interface King {...}
abstract class KingImpl extends Character implements King
abstract class WarriorImpl extends Character implements Warrior
Run Code Online (Sandbox Code Playgroud)
然后你结合了一切:
class WarriorKing extends Character implements Warrior, King {
private King kingImpl;
private Warrior warriorImpl;
public WarriorKing() {
kingImpl = new KingImpl();
warriorImpl = new WarriorImpl();
}
Run Code Online (Sandbox Code Playgroud)
现在假设您kill()在Warrior界面中有一个方法需要由每个实现类实现(WarriorKing必须实现它),并且已经在抽象的WarriorImpl类中实现,您可以执行以下操作:
class WarriorKing extends Character implements Warrior, King {
private King kingImpl;
private Warrior warriorImpl;
public WarriorKing() {
kingImpl = new KingImpl();
warriorImpl = new WarriorImpl();
}
public void kill() {
this.warriorImpl.kill()
}
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以通过一次实施一切来享受所有的世界,拥有模块化的类设计,您可以享受您可能需要的任何角色组合.祝好运!