别把多态背成"父类引用指向子类对象"就完事

很多转岗或查漏补缺的开发者,一提到 Java 多态,脑子里只剩下一句"父类引用指向子类对象,调用的是子类重写的方法"。这句话本身没错,但它太浅,浅到你在看 Spring 源码、读 MyBatis 拦截器链、排查 AOP 代理失效时根本对不上号。这门课只盯多态这一个点,解决的是"语法会写、原理说不清、动态分派和静态分派分不开、虚方法表没概念"的能力缺口。它适合已经写过基本类和接口、能跑通 HelloWorld 但没系统啃过 JVM 方法调用机制的人;如果你连继承和接口的语法都记不全,建议先补面向对象基础再来看,否则原理部分会听得云里雾里。

建议先啃原理再看实现,别跳着看

资料包里线索很明确,就两块:多态原理和多态实现。建议的看课顺序是先原理后实现,别反过来。第一块原理部分会讲到方法表、虚方法调用、分派机制这些底层概念,这是后面理解实现的骨架;你先跳到实现去看代码怎么写,会觉得"这不就是平时写的业务代码吗",然后回头听原理还是接不上。看的时候准备纸笔,把父类引用、子类对象、编译期类型、运行期类型这四者的对应关系画一遍,把方法表里指向哪条记录标清楚,比干听视频有效得多。这块内容不长,但信息密度高,别开倍速,一开倍速原理细节就糊过去了,等于白看。

学完能独立回答的几个问题,自己卡一卡

看完这两块之后,别急着关页面,先拿下面几个问题卡自己一下,答得上来才算补到位:第一,多态条件下,字段访问看编译期类型还是运行期类型?方法调用又看哪个?为什么字段不具多态性这个问题经常让人栽跟头。第二,静态方法能不能被重写、能不能参与多态?为什么很多人说静态方法是类方法不参与动态绑定,这背后的分派机制是什么?第三,调用一个对象的方法时,JVM 是怎么通过方法表找到最终要执行的字节码的?这条链路你能从引用类型一路说到方法表槽位,就算把原理吃透了。第四,给你一段继承层级很深的代码,让你判断某次方法调用走的是静态分派还是动态分派,你能一眼分清吗?

资料怎么配合练习?视频里讲到的每一条规则,都自己写一段最小复现代码去验证:写父类和两个子类,分别定义同名实例方法和静态方法,再用父类引用去调用,打印结果和方法表预期对照。遇到字段、静态方法、私有方法这些"看似多态其实不是"的边界情况,单独写 main 方法跑一遍,把输出和原理想明白为什么不符合多态预期。别只看不敲,多态这种东西,原理听懂和代码能调对中间差着十几次手动验证,缺什么补什么,别假装什么都会。

课程目录

1-1 [多态] 多态原理 (22:22)
1-2 [多态] 多态实现 (24:52)