接口注意细节
package main
import (
"fmt"
)
/**
接口注意事项:
1) 接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例)
2)接口中所有的方法都没有方法体,即都是没有实现的方法
3) 在Golang中,一个自定义类型需要将某个接口的所有方法都实现,说这个自定义类型实现了该接口
4)一个自定义类型只有实现某个接口,才能将该自定义类型的实例(变量)赋值给接口类型
5) 只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型
6) 一个自定义类型可以实现多个接口
7)Golang 接口中不能有任何变量
8)一个接口(比如AA接口 )可以继承多个别的接口 (比如BB CC接口),这时如果要实现A接口,\
也必须将B,C接口的方法全部实现
9)interface 类型默认是一个指针类型(引用类型),如果没有对interface 初始化就是用那么会输出nil
10)空接口interface{} 没有任何方法,所以所有类型都实现了空接口
*/
type OneInterface interface {
info()
}
type tWOInterface interface {
offer()
}
type Person struct {
Name string
}
type fake int
func (ss fake) info() {
fmt.Println("fake Info")
}
func ( p *Person) info() {
fmt.Println("Person Info()")
}
func (p *Person )offer() {
fmt.Println("Person offer~~~")
}
/*func ( p Person) info() {
fmt.Println("Person Info()")
}*/
type BB interface {
test01 ()
}
type AA interface {
test02 ()
}
type cc interface {
AA
BB
test03()
}
type Empty interface { //10)空接口interface{} 没有任何方法,所以所有类型都实现了空接口
}
//如果要实现CC 接口也要必须实现AA BB 接口
func (p Person)test01() {
fmt.Println("Person test01")
}
func (p Person)test02() {
fmt.Println("Person test02")
}
func (p Person)test03() {
fmt.Println("Person test03")
}
func main() {
var p Person
var one OneInterface = &p // 结构体变量,实现了info() 即实现了OneInterface 接口
one.info()
//只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型
var ss fake
var ssone OneInterface = ss
ssone.info()
var two tWOInterface = &p //自定义接口可以实现多个接口
two.offer()
var aa AA = p
var bb BB = p
var c cc = p
aa.test02()
bb.test01()
c.test03()
c.test01()
c.test02()
var empty Empty = p
fmt.Println(empty)
var emp interface{} = p
fmt.Println(emp)
var num1 float64 = 55.22
emp = num1
empty = num1
fmt.Println(emp,empty)
}