知识卡片

继承是类独有的能力

专业/工作 · 749

内容

Swift里只有类支持继承(class Zombie: Monster),结构体和枚举完全没有继承机制——子类继承父类的全部属性和方法,可以用override重写方法、用super.方法名()调用父类实现,但super这个前缀本身就是继承体系的产物,值类型上根本用不到。这不是遗漏,而是刻意的设计边界:继承会带来”父类的实现细节被子类依赖”这种脆弱耦合,而值类型的设计目标是简单、可预测、按值复制,二者的取舍方向相反,因此值类型索性不提供继承。若想阻止某个方法被继续重写,可以给它加final——这让类的继承层级在某一点被显式封死,是”允许扩展但明确划定边界”的折中,而不是干脆禁掉子类化整个类型。

参考来源

《Swift编程权威指南》第15章《结构体和类》