gpt4 book ai didi

java - 为什么 "this"关键字也引用子类?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:43:30 27 4
gpt4 key购买 nike

在以下场景中,Main.registerEvents(Listener) 是游戏 API 事件系统的一部分。假设它应该使用 @EventHandler 注释注册任何方法。

public abstract class Spell implements Listener {
protected Spell() {
Main.getInstance().registerEvents(this);
}
@EventHandler
public void onMove(PlayerMoveEvent event) {

}
}

public class Fireball extends Spell {
@EventHandler
public void onChat(PlayerChatEvent event) {

}
}

一般来说,既然this指的是当前实例,怎么可能Fireball.onChat(PlayerChatEvent)也被注册了呢?

最佳答案

Generally speaking, since this refers to the current instance, how is it possible that Fireball.onChat(PlayerChatEvent) is registered too?

因为当您构建Fireball 实例时,this 指的是在执行时构建的Fireballthis编译时类型是Spell,但是如果你打印出this.getClass()(甚至在 Spell 构造函数中)它将显示 Fireball

因此,如果 registerEvents 正在查看对象的执行时类型并使用反射查找事件处理程序,它将看到 onChat

关于java - 为什么 "this"关键字也引用子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918502/

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