码迷,mamicode.com
首页 > 其他好文 > 详细

Golang的多态

时间:2014-08-25 14:35:04      阅读:873      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   div   log   sp   c   type   as   

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的多态

标签:style   blog   color   div   log   sp   c   type   as   

原文地址:http://www.cnblogs.com/healerkx/p/3934784.html

(0)
(5)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!