package main
import(
"fmt"
)
//接口是一种类型,规定了该类型有哪些方法
//可以使用接口实现多态
//例1
/*
type cat struct{}
func (c cat) speak() {
fmt.Println("喵喵喵~")
}
type dog struct{}
func (d dog) speak() {
fmt.Println("汪汪汪~")
}
type pig struct{}
func (p pig) speak() {
fmt.Println("哼哼哼~")
}
func (p pig) eat() {
fmt.Println("猪饲料好吃~")
}
type animal interface {
speak()
//eat()
}
func AnimalSpeak(s animal) {
s.speak()
//s.eat()
}*/
//例2
//接口的嵌套
type eater interface{
eat()
}
type speaker interface{
speak()
}
type animals interface{
eater
speaker
}
type cat struct{}
type dog struct{}
func (c cat) eat() {
fmt.Println("鱼好吃")
}
func (c cat) speak() {
fmt.Println("喵喵喵")
}
func (d dog) eat() {
fmt.Println("骨头好吃")
}
func main() {
fmt.Println("interface study:")
//var my_pig pig
//AnimalSpeak(my_pig)
//var my_cat cat
//AnimalSpeak(my_cat) //接口中的所有方法在具体类中都需要有定义,但是具体类中的方法数目可以大于接口中的方法数目
//接口定义
/*
type 接口名 interface{
方法名(参数列表)(返回值列表)
方法名(参数列表)(返回值列表)
...
}*/
//面向接口编程
//使用值接受者时,接口变量赋值为值和指针均可。使用指针接受者时,只能用指针赋值。
//接口可以嵌套接口
var c1 cat
var eater1 eater
eater1 = c1
eater1.eat()
var animal1 animals
animal1 = c1
animal1.eat()
animal1.speak()
//空接口
var nif interface{}
nif = 10
fmt.Println(nif)
//接口变量的类型可以通过接口断言判断(就是判断是什么类型,然后进行类型转换)
}
10-14
04-18