首页 > 代码库 > Golang的多态

Golang的多态

Golang的多态是个技巧性质的东西,我看许式伟的书中并未提到真正意义的多态,我自己摸索了一下,我觉得以下的书写,可能最复合工程需要。

首先看例1:

type IFly interface {    fly()}type A struct {}func (a A) fly() {    println("A.fly")}type B struct {    A}func (b B) fly() {    println("B.fly")}func main() {        a := B{}    a.fly()        fmt.Println(a)}

首先要学会利用interface来进行多态。

然而,这是一个不成熟的多态。

看例2就知道这个方案完全不能用于实践

type IFly interface {    fly()}type A struct {}// 新加一个成员func (a A) fly2() {     a.fly()}func (a A) fly() {    println("A.fly")}type B struct {    A}func (b B) fly() {    println("B.fly")}func main() {        a := B{}    a.fly2()    fmt.Println(a)}

这个结果并不让人满意。

解决方案可以这么弄。

type IFly interface {    fly()}type A struct {    a string    Derived IFly}func (a A) fly2() {    a.Derived.fly()}func (a A) fly() {    println("A:fly")}type B struct {    A}func (b B) fly() {    println("B:fly"+ b.a)}func main() {        a := B{}    a.Derived = a    a.fly2()}

OK,这是我自己摸索的,不知道别人是什么办法?

 

Golang的多态