go 多态

GO 多态概念:

1、定义一个接口,用于接收实例化对象, 此接口中设计好需要的方法(类 - 函数),可以有多个。

2、任何实现了这个接口的类型,都可以赋值给这个接口,从而实现多态。

3、多个类之间不需要有继承关系。

4、如果interface 接口中定义了多个接口(方法), 那么实际的类必须全部实现这些接口(方法)函数,才能赋值给接口

 

package main

import (
	"fmt"
)

// 对外interface接口, 其中实现了结构体(类)的方法
type IAttach interface {
	// 结构体对象绑定的方法
	CallName()
}

// 定义结构体(类)
type LowObject struct {
	name string
	level int
}


type HeightObject struct {
	name string
	level int
}

// 为结构体(LowObject)绑定(类)方法 CallName
func (call *LowObject) CallName() {
	fmt.Printf("name: %v,  level: %v\n", call.name, call.level)
}

func (o *HeightObject) CallName() {
	fmt.Printf("name: %v,  level: %v\n", o.name, o.level)
}


// 多态引用
func Exe(a IAttach){
	a.CallName()
}

func main() {
	// 定义一个用来接收 实例化对象的 接口, 此接口必须实现了结构体绑定的方法
	var p_1 IAttach

	// 实例化
	lowLevel := LowObject{
		name: "哈哈",
		level: 1,
	}

	heightObject := HeightObject{
		name: "嘿嘿",
		level: 10,
	}

	// 接口引用
	lowLevel.CallName()
	p_1 = &lowLevel
	p_1.CallName()

	heightObject.CallName()
	p_1 = &heightObject
	p_1.CallName()

	// 多态
	Exe(&lowLevel)
	Exe(&heightObject)
}

 

posted @ 2022-09-09 15:29  萤huo虫  阅读(236)  评论(0编辑  收藏  举报