• GO语言面向对象03---接口与断言


    接口的实现

    package main
    
    import "fmt"
    
    type Animal interface {
    	//出生
    	SayHelloWord()
    	//死亡
    	Godie()
    	//生活
    	Live(food string) (Energy int)
    }
    
    type Pig struct {
    	Name string
    }
    
    /*猪的指针实现了动物接口*/
    //出生
    func (p *Pig)SayHelloWord(){
    	fmt.Printf("%s哼哼哼
    ",p.Name)
    }
    //死亡
    func (p *Pig)Godie(){
    	fmt.Printf("%s啊啊啊我死了
    ",p.Name)
    }
    //生活
    func (p *Pig)Live(food string) (Energy int){
    	fmt.Printf("%s食用了一些%s,生产了%d卡路里
    ",p.Name,food,1200)
    	return 1200
    }
    
    type Cat struct {
    	Name string
    }
    
    /*猫的指针实现了动物接口*/
    //出生
    func (c *Cat)SayHelloWord(){
    	fmt.Printf("%s出生了
    ",c.Name)
    }
    //死亡
    func (c *Cat)Godie(){
    	fmt.Printf("%s:糟了life-=1
    ",c.Name)
    }
    //生活
    func (c *Cat)Live(food string)(Energy int){
    	fmt.Printf("铲屎官给%s大人服用了一些%s
    ",c.Name,food)
    	return 1
    }
    
    func main031()  {
    	var animal Animal
    
    	/*一个动物实例,既可以指向一只猪的指针,又可以指向一只猫的指针*/
    	//animal = &Pig{"佩奇"}
    	animal = &Cat{"加菲"}
    
    	/*无视当前的animal的具体类型,调度其动物的共性*/
    	animal.SayHelloWord()
    	animal.Godie()
    	animal.Live("饲料")
    }
    
    /*开一个肉联厂*/
    func main() {
    	animals := make([]Animal, 0)
    	animals = append(animals, &Pig{"佩奇"})
    	animals = append(animals, &Cat{"加菲"})
    
    	for _,animal := range animals{
    		animal.Live("饲料")
    		animal.Godie()
    	}
    }
    

     

    接口的类型断言

    package main
    
    import "fmt"
    
    type Animal interface {
    	//出生
    	SayHelloWord()
    	//死亡
    	Godie()
    	//生活
    	Live(food string) (Energy int)
    }
    
    type Pig struct {
    	Name string
    }
    
    /*猪的指针实现了动物接口*/
    //出生
    func (p *Pig)SayHelloWord(){
    	fmt.Printf("%s哼哼哼
    ",p.Name)
    }
    //死亡
    func (p *Pig)Godie(){
    	fmt.Printf("%s啊啊啊我死了
    ",p.Name)
    }
    //生活
    func (p *Pig)Live(food string) (Energy int){
    	fmt.Printf("%s食用了一些%s,生产了%d卡路里
    ",p.Name,food,1200)
    	return 1200
    }
    
    func (p *Pig)Gongniba()  {
    	fmt.Printf("%s在拱泥巴
    ", p.Name)
    }
    
    type Cat struct {
    	Name string
    }
    
    /*猫的指针实现了动物接口*/
    //出生
    func (c *Cat)SayHelloWord(){
    	fmt.Printf("%s出生了
    ",c.Name)
    }
    //死亡
    func (c *Cat)Godie(){
    	fmt.Printf("%s:糟了life-=1
    ",c.Name)
    }
    //生活
    func (c *Cat)Live(food string)(Energy int){
    	fmt.Printf("铲屎官给%s大人服用了一些%s
    ",c.Name,food)
    	return 1
    }
    
    func (c *Cat)Gulu()  {
    	fmt.Printf("%s咕噜咕噜
    ",c.Name)
    }
    
    func main031()  {
    	var animal Animal
    
    	/*一个动物实例,既可以指向一只猪的指针,又可以指向一只猫的指针*/
    	//animal = &Pig{"佩奇"}
    	animal = &Cat{"加菲"}
    
    	/*无视当前的animal的具体类型,调度其动物的共性*/
    	animal.SayHelloWord()
    	animal.Godie()
    	animal.Live("饲料")
    }
    
    /*开一个肉联厂*/
    func main() {
    	animals := make([]Animal, 0)
    	animals = append(animals, &Pig{"佩奇"})
    	animals = append(animals, &Cat{"加菲"})
    
    /*	for _,animal := range animals{
    		switch animal.(type) {
    		case *Cat:
    			fmt.Printf("发现一只猫:%v
    ",animal)
    		case *Pig:
    			fmt.Printf("发现一只猪:%v
    ",animal)
    		}
    	}*/
    
    	for _,animal := range animals{
    		cat,ok:= animal.(*Cat)
    		if ok{
    			cat.Gulu()
    		}
    		fmt.Println(animal,cat,ok)
    		pig,ok:= animal.(*Pig)
    		if ok{
    			pig.Gongniba()
    		}
    		fmt.Println(animal,pig,ok)
    	}
    	
    }
    

     

    空接口与空接口的类型断言

    package main
    
    import "fmt"
    
    func main() {
    	//空接口可以看做各种类型
    	data := make([]interface{}, 0)
    	data = append(data, "你妹")
    	data = append(data, 18)
    	data = append(data, 0.5)
    	data = append(data, false)
    
    	/*for _,x := range data{
    		switch x.(type) {
    		case string:
    			fmt.Println("发现字符串",x)
    		case int:
    			fmt.Println("发现整型",x)
    		case float64:
    			fmt.Println("发现浮点型",x)
    		default:
    			fmt.Println("发现其他类型",x)
    		}
    	}*/
    
    	for _,x := range data{
    		if xStr,ok := x.(string);ok{
    			fmt.Printf("发现字符串%s,长度是%d
    ",xStr,len(xStr))
    		}else {
    			fmt.Println("其他类型",x)
    		}
    	}
    }
    

      

  • 相关阅读:
    php单元测试标注(注解)
    python数字图像处理(1):环境安装与配置
    python实现身份证识别
    python tensorflow 学习
    python tensorflow 安装
    python 微信跳一跳进阶
    python 微信跳一跳和源码解读
    C#保存登录用户名供其他页面调用
    C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)
    C# JavaScriptSerializer 解析Json数据(多方法解析Json 三)
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11901923.html
Copyright © 2020-2023  润新知