(三十五)golang--面向对象之多态

(三十五)golang--面向对象之多态,第1张

概述多态:变量具有多种形态,可以用统一的接口来调用不同的实现。 接口体现多态特征: (1)多态参数:之前所讲的Usb接口案例,既可以接受手机变量,也可以接受相机变量,就体现了usb接口的多态; (2)多态

多态:变量具有多种形态,可以用统一的接口来调用不同的实现。

接口体现多态特征:

(1)多态参数:之前所讲的Usb接口案例,既可以接受手机变量,也可以接受相机变量,就体现了usb接口的多态;

(2)多态数组:

package mainimport (    "fmt")type usb interface {    start()    stop()}type phone struct {    name string}func (p phone) start() {    fmt.Println(p.name,手机开始工作)}func (p phone) stop() {    fmt.Println(p.name,1)">手机停止工作)}type camera struct {    name string}func (c camera) start() {    fmt.Println(c.name,1)">相机开始工作)}func (c camera) stop() {    fmt.Println(c.name,1)">相机停止工作)}type computer struct {}func (co computer) working(usb usb) {    usb.start()    usb.stop()}func main() {    var usbarr [3]usb    usbarr[0] = phone{小米}    usbarr[1] = phone{vivo}    usbarr[2] = camera{尼康}    fmt.Println(usbarr)    for i := 0; i < len(usbarr); i++ {        usbarr[i].start()        usbarr[i].stop()    }}

我们以前讲到,数组是只能存储同一种类型的数据,利用多态数组,就可以存储不同的类型了;

如何将一个接口变量赋值给一个自定义类型的变量?使用类型断言

@H_419_65@

类型断言:由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言;要保持原来空接口指向的数据类型和断言的数据类型一致;

为了避免输出panic报错,可以进行断言判断;

类型断言实践一:

我们给phone中加入一个方法call(),在调用usb变量时,usb.call(),肯定是不对的,因为usb可能是phone,也可能是camera,而camera是没有这个函数的,因此,在调用的时候用类型断言。

)}func (p phone) call() {    fmt.Println(p.name,1)">手机在打电话)}type computer struct {}func (co computer) working(usb usb) {    usb.start()    //如果usb还指向phone的结构体变量,则还需要调用call方法    if phone,ok := usb.(phone); ok {        phone.call()    }    usb.stop()}func main() {    var usbarr [3}    var com computer    fmt.Println(usbarr)     {        com.working(usbarr[i])    }}

类型断言实践2:循环判断输入参数的类型

)type student struct {    name string}func typeJudge(items ...interface{}) {    for index,x := range items {        switch x.(type) {        case bool:            fmt.Printf(第%v个参数是bool类型,值是%v\n,index,x)        case int,int32,int64:            fmt.Printf(第%v个参数是整数类型,值是%v\n第%v个参数是float32类型,值是%v\n第%v个参数是float64类型,值是%v\n第%v个参数是string类型,值是%v\n第%v个参数是student类型,值是%v\nstudent:            fmt.Printf(第%v个参数是*student类型,值是%v\n第%v个参数类型不确定,值是%v\n    var n2 float64 = 1.2    var n3 int32 = 1    var name string = tom    var n5 bool = true    stu1 := student{jack}    stu2 := &student{bob}    typeJudge(n1,n2,n3,name,n5,stu1,stu2)}

总结

以上是内存溢出为你收集整理的(三十五)golang--面向对象之多态全部内容,希望文章能够帮你解决(三十五)golang--面向对象之多态所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1262161.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存