go 多态

GO 多态概念:

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

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

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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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 @   萤huo虫  阅读(246)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示