知识卡片
接口变量只能看见接口方法
内容
一旦把一个具体类型的值赋给了接口类型的变量(或者作为接口类型的参数传入函数),能在它上面 调用的方法就只剩接口里声明的那几个,哪怕这个具体类型实际上还有更多别的方法,也一概调用不了—— 编译器只认变量声明的接口类型,不会去看背后到底是什么具体类型。发散:这看似是限制,实际上是接口作为”抽象契约”的必然 代价——如果接口变量能随意调用具体类型的额外方法,那接口就不再是一份稳定的契约,调用方写的 代。
参考来源
- 位置:《Head First Go语言程序设计》第11章《你能做什么:接口》(源文件:_epub-src/index_split_002.html)
- 结论依据:原文在该章节围绕“一旦把一个具体类型的值赋给了接口类型的变量(或者作为接口类型的参数传入函数),能在它上面调用的方法就只剩接口里…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:,它定义在TapeRecorder类型中。我 们仅仅将TapeRecorder值传入TryOut,这样会工作正常,对吗? 不幸的是,不对。我们之前看到,如果把一个具体类型的值赋给了 接口类型的变量(包括函数参数),然后你就只能在其上调用接口的方 法,不管具体类型还具有何种其他方法。在TryOut函数中,我们没有 TapeRecorder值…