开发者社区 问答 正文

为什么每个类的 accept 方法内容相同,但不能直接写在父类 SqlNode 中?

为什么每个类的 accept 方法内容相同,但不能直接写在父类 SqlNode 中?

展开
收起
不吃核桃 2024-07-31 13:04:57 44 分享 版权
1 条回答
写回答
取消 提交回答
  • 每个类的 accept 方法内容相同,但不能直接写在父类 SqlNode 中,因为这样做会导致所有的 accept 调用都指向 SqlVisitor 中的 visit(SqlNode) 方法(如果该方法存在的话)。由于 Java 的重载是在编译时根据方法的参数类型决定的,而 this 在 accept 方法中的编译时类型是 SqlNode,因此无论实际运行时的对象是哪个子类,都会调用到 visit(SqlNode),从而忽略了具体的子类类型,导致其他重载的 visit 方法形同虚设,不符合预期。

    2024-07-31 14:01:14
    赞同 展开评论
问答地址: