我认为这比解释更好。
例子:
public class AttackCommand implements Command {}...
public class DefendCommand implements Command {}...
....
假设我们想将这些添加到一个通用的命令列表中。然后你可以将这些添加到下面的列表中。
(在新班级)
public ArrayList<Command> commands = new ArrayList();
public CommandManager() {
commands.add(new AttackCommand());
commands.add(new DefendCommand());
}
现在这就是假设引用的来源。如果我们想按名称获取命令列表(假装命令有一个 getName 方法),或者通过 AttackCommand 获得最后一个被攻击的目标(假装它有一个 LastAttacked 方法)怎么办?
public void printNames() {
for (Command cmd : commands) {
System.out.println(cmd.getName());
}
}
public Entity getLastAttackTarget() {
for (Command cmd : commands) {
if (cmd instanceof AttackCommand) {
return cmd.lastAttacked();
}
}
}
(我知道只按名称抓取的命令映射会更好,但为了示例......)
本质上,它是对继承接口的所有事物的更好的通用引用,而不是接口本身。