go 学习之接口

注意事项:

接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)

在golang中,一个自定义类型需要将某个接口的所有方法都实现,我们说这个自定义类型实现了该接口

只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型

一个自定义类型可以实现多个接口

一个接口(A接口)可以继承多个别的接口(接口B,C),这是如果要实现A接口也必须将B,C接口实现。

interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么会输出nil

一个接口继承另外两个接口,如果两个接口包含同样的方法时,编译器会报错,程序不会报错

指针实现了空接口时,要使用 var a AInterface = &结构体名称

空接口(interface{})不包含任何的方法,正因为如此,所有的类型都实现了空接口,因此空接口可以存储任意类型的数值

接口和继承:

当A结构体继承了B结构体,那么A结构体就自动的继承了B结构体的字段和方法,并且可以直接使用;

当A结构体需要扩展功能,同时希望不破坏继承关系,则可以实现某个接口即可,实现接口是对继承机制的补充

接口和继承解决 的问题不同:

继承的主要价值在于:解决代码的复用性和可维护性

接口的主要价值在于:设计,设计好各种规范(方法),让其他自定义类型去实现这些方法

接口比继承更加灵活 Person  Student

继承是 满足 is - a 的关系,而接口只需满足 like - a 的关系

接口在一定程度上实现代码解耦

原文地址:https://www.cnblogs.com/Caoxt/p/14132838.html