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)
}
网友评论