ch16、面向对象编程-Go语言的相关接口

ch16、面向对象编程 - Go语言的相关接口

1、Duck Type式接口实现

接口定义与实现:

// 定义接口
type 接口名称 interface{
    函数声明
}

// 定义一个struct(类似object),然后实现该行为(方法)
type GoProgrammer struct{
}

func (p *GoProgrammer) funcName() returnType {
	return "fmt.Println(\"Hello World.\")"
}

实例如下:

package interfacetest

import "testing"

type Programmer interface {
   
	WriteHelloWorld() string
}

type GoProgrammer struct {
   
}

func (p *GoProgrammer) WriteHelloWorld() string {
   
	return "fmt.Println(\"Hello World.\")"
}

func TestClient(t *testing.T) {
   
	var p Programmer    // 接口变量
	p = new(GoProgrammer)
	t.Log(p.WriteHelloWorld())
}

与其它主要编程语言的差异:

  • 接口为非入侵性,实现不依赖于接口定义
  • 所有接口的定义可以包含在接口使用者的包内

Go接口注意点:

  • 接口中只能有方法的声明不能有方法的实现
  • 接口中只能有方法什么不能有字段
  • 只有实现了接口中所有的方法, 才算实现了接口, 才能用该接口类型接收
package main

import "fmt"

// 1.定义一个接口
type usber interface {
   
	start()
	stop()
}
type Computer struct {
   
	name  string
	model string
}

// 2.实现接口中的所有方法
func (cm Computer) start() {
   
	fmt.Println("启动电脑")
}
func (cm Computer) stop() {
   
	fmt.Println("关闭电脑")
}

// 2.只实现了接口中部分方法
type Phone struct {
   
	name  string
	model string
}

func (p Phone) start() {
   
	fmt.Println("启动手机")
}
func main() {
   
	// 1.定义一个usber接口类型变量
	var i usber
	// 2.用usber接口类型变量接收Computer类型结构体
	i = Computer{
   "戴尔", "F1234"} // 实现了所有方法, 不会报错
	// 3.用usber接口类型变量接收Phone类型结构体
	//i = Phone{"华为", "M10"} // 只实现了部分方法, 会报错
	fmt.Println(i)
}
  • 和结构体一样,接口中也可以嵌入接口(但不能嵌入自己)
package main

import "fmt"

type A interface {
   
	fna()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值