15.Go语言·面向对象编程应用·接口(二)

main.go

// Go语言·面向对象编程应用·接口
package main

//  包的本质是创建不同的文件夹
//  go的每一个文件都是属于一个包的
//  go以包的形式管理项目和文件目录。
//  import "包的路径"
import (
    // model "day23/model"
    "fmt"
)

var content string = `
————————————————Go语言·面向对象编程应用·接口————————————————————
一、接口 interface
       interface 类型可以定义一组方法,这些方法不需要实现。并且interface不能
    包含任何变量,到某个自定义类型要使用的时候,在根据具体情况把这些方法写出
    来(实现)。
    接口里的所有方法都没有方法体。


    程序设计思想:多态和高内聚低耦合
    type 接口名 interface {
        methodName01(参数列表) 返回列表
        methodName02(参数列表) 返回列表
    }
    不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。
二、接口注意事项:
    1.接口本身不能创建实例,但是可以指向一个实现咯该接口的
    自定义类型的变量(实例)
    2.接口里的所有方法都没有方法体。
    3.一个自定义类型需要将接口的所有方法都实现————自定义类型实现咯该接口
    4.一个自定义类型只有实现咯某个接口,才能将该自定义类型的实例(变量)赋给接口类型
    5.只要是自定义数据类型,就可以实现接口,不一定是结构体类型。
        type Pay interface {
            Charge()
        }

        type Alibb struct {}

        // 实现接口的所有方法
        func (aly Alibb) Charge(){}

        var aly Alibb
        // 自定义类型的实例(变量)赋给接口类型
        var pay Pay = aly

        pay.Charge()

        // 只要是自定义数据类型,就可以实现接口,不一定是结构体类型。
        type integer int

        func (i integer) Charge() {}

        var num integer = 10
        var mpay Pay = num
        mpay.Charge()
    6.一个自定义类型,可以实现多个接口
    7.Golang接口中不能有任何变量
    8.一个接口(比如:A接口)可以继承多个别的接口(比如:B,C接口),此时要实现A接口,也
    必须将B,C接口的方法全部实现。(A,B,C接口方法全部实现)
    9.interface类型默认是一个指针(引用类型)如果没有对interface初始化就使用,就会输
    出nil
    10.空接口interface{}没有任何方法,所有类型都实现咯空接口,即可以把任何数据类型的变
    量赋给空接口。
`

type Pay interface {
    Charge()
}

type Order interface {
    CreateOrder()
}

type PaySystem interface {
    Pay
    Order
    Auth()
}


type Alibb struct {
}

// 实现接口的所有方法
func (aly Alibb) Charge(){
    fmt.Println("Alibb 支付。。。")
}

func (aly Alibb) CreateOrder() {
    fmt.Println("订单号:","AliNo.00002")
}

func (aly Alibb) Auth() {
    fmt.Println("认证成功,可以继续操作!")
}

// 只要是自定义数据类型,就可以实现接口,不一定是结构体类型。
type integer int
func (i integer) Charge() {
    fmt.Println("你的充值金额:",i)
}

// 空接口
type T interface {}     


func main() {
    var aly Alibb
    // 自定义类型的实例(变量)赋给接口类型
    var pay PaySystem   = aly
    pay.Auth()
    pay.Charge()
    pay.CreateOrder()

    var num integer = 100
    var mpay Pay = num
    mpay.Charge()

    fmt.Println()
    var t1 interface{} = 100
    fmt.Println("空接口测试:",t1)

    var t2 T = [3]int{1,2,3}
    fmt.Println("空接口测试:",t2)
}

你可能感兴趣的:(15.Go语言·面向对象编程应用·接口(二))