interface实现struct(面向对象的特点实现)

package main

import "log"

type dog struct{}

type cat struct{}

func (d *dog) call() string {
    return "wangwang"
}

func (c *cat) call() string {
    return "miaomiao"
}
//这个时cat特有的方法,可以不在interface内实现
func (c *cat) dump() {
    log.Println("dump")
}

//上述实现了两个struct和对应的call方法
//interface相当于class,注意这里包含的方法要和将要实现的struct实现的方法名称和返回值都一样
type animal interface {
    call() string
}

func main() {

    fammilyDog := &dog{}
    fammilyCat := &cat{}
    var fammilyAnimal animal
//interface实现dog和对应方法,
//这里需要注意的时,interface只能实现定义过的对应struct的函数(就比如这里的call,cat的dump就不能通过这种方法访问
    fammilyAnimal = fammilyDog 
    log.Println(fammilyAnimal .call())
//interface实现cat和对应方法
    fammilyAnimal = fammilyCat 
    log.Println(fammilyAnimal .call())
}

你可能感兴趣的:(interface实现struct(面向对象的特点实现))