Golang的封装继承与多态

时间:2025-03-08 07:35:15
package main import "fmt" // 在C++中,实现接口的时候,使用纯虚函数代替接口 // 在Golang中,有专门的关键字interface来代表接口 // interface不仅仅是用于处理多态的,它可以接收任意的数据类型,类似于void func main() { var i, j, k interface{} names := []string{"simple", "china"} i = names fmt.Println("i代表切片数组:", i) age := 24 j = age fmt.Println("j代表数字:", j) str := "hello world" k = str fmt.Println("k代表字符串:", k) // 上上面的代码中,我们现在只知道k是interface,但是不能够明确知道它代表的数据类型 // 通过变量.(数据类型)判断指定interface是否为指定的数据类型 kval, ok := k.(int) if !ok { fmt.Println("k不是int") } else { fmt.Println("k是int,值为:", kval) } // 最常用的常见:把interface当初函数的参数,类似于函数,func Println(a ...interface{}) (n int, err error) {} // 可以通过switch来判断用户输入的数据类型,然后根据不同的数据类型做相应的逻辑处理 // 创建一个具有三个接口的数据切片 array := make([]interface{}, 4) array[0] = 1 array[1] = "hello world" array[2] = true array[3] = 3.1415 for _, val := range array{ // 获取当前接口的真正数据类型 switch t := val.(type) { case int: fmt.Printf("当前数据类型为int,内容为:%d\n",t) case string: fmt.Printf("当前数据类型为string,内容为:%s\n",t) case bool: fmt.Printf("当前数据类型为bool,内容为:%v\n",t) // %v可以自动推导数据类型 default: fmt.Printf("不是合理的数据类型") } } }