面向对象设计里有一个常见的误区:先写一堆子类,再回头“提炼”一个父类。结果父类越抽象越空,子类之间既没有共同行为,也没有可替换性,改一处牵动全身。这门课针对的正是这个缺口——父类不是靠抽象“归纳”出来的,而是靠改变假设、用父类包装通信协议“设计”出来的。
这门课解决什么问题
很多学习者学完继承语法后,会下意识地把“父类”当成“所有子类的公共部分”的容器。于是出现这样的代码:父类里塞满空方法,子类各自覆盖,或者用 instanceof 判断类型。这门课直接拆掉这个假设,换一个更贴近实际协作的视角:父类应该描述的是“通信协议”,即调用方通过父类接口能拿到什么、要发出什么,而不关心底层具体是谁在处理。课程从“父类不是抽象出来的”这个反直觉命题切入,演示当把父类定义为协议时,子类之间的关系会发生什么变化,以及如何由此产生更多新鲜的组合方式。
这门课适合已经写过一些类、但一遇到继承设计就犹豫不决的学习者。它不教语言基础,而是解决“怎么组织类”的问题。如果你能写简单的类,但说不清为什么某个父类该存在,或者你的父类经常被修改,那这门课正合适。
建议先看哪几块
建议按顺序观看,不要跳。第一小节“父类不是抽象出来的”是整门课的立论基础,它先带你看清楚传统抽象思路的盲区,并给出一个反例:为什么有些类看起来应该有共同父类,但硬抽出来反而更糟。第二小节“改变假设,以父类包装通信协议”是核心操作,它把父类从“公共代码的存放处”转成“双方约定的接口”,并演示如何用这种父类去包装一个通信协议。第三小节“调整假设之后,创造更多新鲜组合”是延伸应用,展示在协议化父类的基础上,如何通过替换协议实现不同的组合,而不是靠继承树堆叠。
如果你时间紧张,至少完整看完前两节。第三节可以在理解前两节后,再用来对照自己的项目,看看哪些地方可以用组合替代继承。每节时长很短,但信息密度高,建议每看完一节就暂停,把演示代码自己重写一遍,不要只跟着看。
学完能独立做什么
学完这门课,你能够独立判断一个设计中的“父类”是否合理:当父类只是“子类的公共字段集合”时,你会意识到它可能该被拆掉;当父类代表一个明确的通信协议时,你能用接口或抽象类把它表达出来,并让不同子类在协议约束下自由替换。你也能在新增需求时,不再被迫修改父类,而是通过新增一个实现协议的类,和现有类组合出新的行为。这些能力可以直接用在日常的业务建模、插件系统、协议适配器,以及任何需要多态协作的代码里。
资料包里除了视频,还有配套的代码示例和练习。配合练习的方式是:先不看示例代码,按自己的理解写出一个“抽象出来的父类”,然后对照课程中的协议化父类版本,观察两者在扩展性上的差异。再尝试把第三节里的组合方式,套用到你正在做的某个真实类关系上,看是否能让原来臃肿的继承树变薄。这样一遍下来,比单纯
课程目录
1 Sec_01_父类不是抽象出来的 (04:19) 2 Sec_02_改变假设_以父类包装通信协议 (03:03) 3 Sec_03_调整假设之后_创造更多新鲜组合 (04:51)





