结论:用Ctrl+H看继承结构,用Ctrl+Alt+H看方法调用链;前者展示类型层级关系,基于静态编译分析;后者展示调用路径,依赖项目索引,二者目的、数据源不同,不可替代。

直接说结论:用 Ctrl + H 看继承结构,用 Ctrl + Alt + H 看方法调用链,两者目的不同、数据来源不同、不能互相替代。
用 Ctrl + H 查看类/接口的继承与实现关系
这个快捷键打开的是 Type Hierarchy 窗口,核心是“类型层级”,不是“运行时调用”。它基于编译期静态分析,展示的是 Java 类型系统定义的父子、实现、扩展关系。
- 光标放在任意类名、接口名或抽象类上,按
Ctrl + H即可触发 - 窗口顶部有一排过滤按钮:默认显示全部(父类 + 子类 + 实现类),点击中间按钮只看父类链(比如
ArrayList→AbstractList→AbstractCollection→Object),点击右侧按钮只看所有子类 - 接口使用
Ctrl + H会列出所有直接/间接实现它的类,但不会显示接口之间的 extends 关系;想看接口继承链,得选中那个被继承的接口再按一次Ctrl + H - 如果某子类在当前项目模块外(比如 JDK 或第三方 jar),它仍会出现在列表里,但右键无法跳转——这是正常现象,不是配置问题
用 Ctrl + Alt + H 查看方法的调用链(Call Hierarchy)
这个功能不关心“谁继承了谁”,只关心“谁调用了这个方法”,结果依赖于当前工程的源码索引。它不包含反射调用、动态代理、Lambda 表达式内联调用等运行时行为。
- 光标必须停在方法声明行(如
public void doSomething()的doSomething上),不能停在调用处 - 展开后看到的是“调用者 → 被调用者”层级,每层节点可继续展开,但深度受限于索引精度;跨 module 调用需确保目标 module 已被正确引入且源码可见
- 如果某个调用没出现,常见原因是:该调用来自字节码(如 Lombok 生成)、来自 Groovy/Kotlin 混合代码、或调用方未被 IDEA 索引(比如 jar 包里没附带 sources.jar)
- 窗口右上角有漏斗图标,点开可过滤“仅显示本模块”“排除测试代码”“显示继承重写的方法”等,实际排查时建议先关掉“排除测试”,避免漏掉关键路径
什么时候该用 Diagram(类图 / UML 图)
当 Ctrl + H 和 Ctrl + Alt + H 都不够直观,尤其涉及多级继承+多接口实现+复杂依赖时,Diagram 是唯一能同时呈现结构与关系的方案。
- 右键类名 →
Diagrams→Show Diagram,或直接按Ctrl + Alt + Shift + U - 生成图中:蓝色实线 =
extends,绿色虚线 =implements,绿色实线 = 接口间extends;箭头方向一律指向被继承/被实现方 - 图刚出来时往往太密,先按
Alt放大,再右键空白处 →Layout→ 选Tree或Organic重新排布 - 想加其他类进来?右键已有节点 →
Add Class to Diagram;想删某个干扰项?选中后按Delete键 - 注意:Diagram 不实时更新,改完代码后需手动右键 →
Reload Diagram,否则可能看到过期关系
真正容易被忽略的点是:Ctrl + H 和 Ctrl + Alt + H 的底层数据都依赖 IDEA 的索引完整性。如果刚导入一个大型 Maven 项目,或者切换了分支,务必等右下角索引进度条走完再查——否则看到的可能是旧快照,子类没列全、调用链断在半路,都很正常。


















