为了账号安全,请及时绑定邮箱和手机立即绑定

Go中如何实现虚拟继承

Go中如何实现虚拟继承

Go
慕姐4208626 2021-08-16 20:09:15
Go中如何实现“虚拟继承”?go lang 编译器版本:“1.3.1 windows/amd64”,是否支持 Go 的“虚拟继承”?我从来没有听说过像 C 这样的语言可以支持“虚拟”,所以我真的误解了。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

虚拟继承不仅解决了多重继承的问题,还赋予了我们多态性。


package main


import (

    "fmt"

    "math"

)


type Form interface {

    Color() string

    Area() float64

}


type form struct {

    color string

}


func (f *form) Color() string {

    return f.color

}


type Circle struct {

    form

    radius float64

}


func (k *Circle) Area() float64 {

    return math.Pi * k.radius * k.radius

}


type Rectangle struct {

    form

    width, height float64

}


func (r *Rectangle) Area() float64 {

    return r.width * r.height

}


func main() {

    var forms [2]Form

    forms[0] = &Circle{

        form:   form{ "black" },

        radius: 5.0,

    }

    forms[1] = &Rectangle{

        form:   form{ "read" },

        width:  2.0,

        height: 3.0,

    }

    for _, f := range forms {

        fmt.Printf("%s: %.2f\n", f.Color(), f.Area())

    }

}

这里我们有一个数组,它们有一些共同点(Color和Area),我们可以在这个数组上迭代调用相同的函数,并且总是会发生正确的事情。


这只是多态的优点之一。它在大多数设计模式中扮演着重要的角色。


查看完整回答
反对 回复 2021-08-16
  • 3 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信