知识卡片
嵌入的封装边界依然生效
内容
把一个类型作为匿名字段嵌入另一个 struct 时,内部类型导出的字段和方法会被”提升”到外部类型, 调用者可以像访问外部类型自己的成员一样直接用。发散:这说明嵌入只是 “把接口暴露出来”的复用手段,不会顺带打穿被嵌入类型原本的封装边界;换句话说,[[封装单位是包而非类]] 这条规则不会因为组合关系而失效,内部类型该保护的字段,包在另一个类型里之后照样受保护。
参考来源
- 位置:《Head First Go语言程序设计》第10章《保密:封装和嵌入》(源文件:_epub-src/index_split_002.html)
- 结论依据:原文在该章节围绕“把一个类型作为匿名字段嵌入另一个struct时,内部类型导出的字段和方法会被"提升"到外部类型,调用者可以像访…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:这个模式在Date类型上定义SetMonth和 SetDay方法。我们只需要在方法中使用指针接收器即可。在调用方法 时,Go会自动把接收器转换为指针,并且在修改struct字段时能够把指 针转换回struct值。 在main函数中,我们创建了一个Date struct的值;通过新的方法设 置了它的Year、Month和Day字段;并且输出…