zoukankan      html  css  js  c++  java
  • 8.1 接口,接口也是一种类型

    package main

    import (
    "errors"
    "fmt"
    )

    /*
    接口:接口指定了一个方法集,这是实现模块化的强大方式。可以将接口视为方法集的蓝本,它描述了方法集中的所有方法,但没有实现他们。
    接口多种方式的实现,就想多态。多态就是多种形式,它让接口能够有多种实现。
    接口声明方式: type ... interface{ 多个签名(也就是函数名)}


    接口的要求:只要实现了它指定的方法集,且函数签名正确无误就可以了。
    接口也是一种类型,可作为参数传递给函数,因此可编写可中用于多个接口实现的函数。

    比如:定义一个数据库接口,只要实现了满足接口的要求,就可以使用任何数据库,因此可以轻松地更换数据库。
    数据库接口可以包含多个实现,这就引入了多态的概念

    多态意味着多种形式,它让接口能够有多种实现。

    比如下例子中的:接口机器人,有个开关方法PowerOn(), 下面结构体都是实现了这个机器人的方法。
    理解成: 接口定义了方法, 下面方法指向某个结构体,函数名就是接口的签名,那么这个结构体就实现了这个接口,属于这个接口多态中的一种。
    */


    type Robot interface{
    PowerOn() error //这个PowerOn叫做Robot的签名,一个签名就是一个定义的函数
    }

    type T850 struct{
    Name string
    }

    func(a *T850)PowerOn()error{
    return nil
    }


    type R2D2 struct{
    Broken bool
    }

    func(r *R2D2)PowerOn()error{
    if r.Broken{
    return errors.New("R2D2 is broken ,this's open")
    }else{
    return nil
    }
    }


    func Boot(r Robot)error{
    return r.PowerOn()
    }

    func main(){
    t:=T850{
    Name:"The Terminator",
    }
    r:=R2D2{
    Broken:true,
    }

    err:=Boot(&r)
    if err !=nil{
    fmt.Println(err)
    }else{
    fmt.Println("Robot is powered on!")
    }

    err=Boot(&t)
    if err!=nil{
    fmt.Println(err)
    }else{
    fmt.Println("Robot is powered on!")
    }

    }
  • 相关阅读:
    51nod 1284:2 3 5 7的倍数 容斥原理
    POJ 2006:Litmus Test 化学公式
    POJ 2039:To and Fro
    POJ 2014:Flow Layout 模拟水题
    南阳722--数独(Dfs)
    Poj2377--Bad Cowtractors(最大生成树)
    并查集知识点总结
    Poj1861--Network(最小生成树)
    杭电2824--The Euler function(欧拉函数)
    杭电1284--钱币兑换问题(有趣)
  • 原文地址:https://www.cnblogs.com/iifeng/p/11586156.html
Copyright © 2011-2022 走看看