标签: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,这是我自己摸索的,不知道别人是什么办法?
标签:style blog color div log sp c type as
原文地址:http://www.cnblogs.com/healerkx/p/3934784.html