用golang来面向对象编程

我们都知道,面向对象的三个要素:封装,继承,多态。而golang其实不能称之为严格意义上面向对象的语言,但我今天在网上翻阅到一篇用golang来写面向对象代码的文章,提供了一个思路,是英文的,这里我把它翻译了一下,供大家和自己参考。

先送上传送门:http://yourbasic.org/golang/inheritance-object-oriented/

翻译:

传统的面向对象编程中提供了三个特性。当 Dog 从 Animal 继承

1,该Dog将重用Animal的代码。
2,x 类型的变量Animal可以指a Dog或a Animal,即基类可以指向子类。
3,x.Eat()将Eat根据什么类型的对象x引用来选择一种方法,即多态性。

在面向对象的行话来说,这些特征被称为代码重用,多态性和动态调度。

所有这些都可以在Go中使用,使用方式如下:

1,组合和嵌入 来实现代码重用。
2,interface 来实现多态性和动态分配。

组合

type Animal struct {
    // …
}

type Dog struct {
    beast Animal
    // …
}

嵌入

type Animal struct {
    // …
}

func (a *Animal) Eat()   { … }
func (a *Animal) Sleep() { … }
func (a *Animal) Breed() { … }

type Dog struct {
    beast Animal
    // …
}

func (a *Dog) Eat()   { a.beast.Eat() }
func (a *Dog) Sleep() { a.beast.Sleep() }
func (a *Dog) Breed() { a.beast.Breed() }

这样通过组合和嵌入,实现了Dog对Animal成员变量和成员方法的继承,虽然写起来有些繁琐。

interface

type Sleeper interface {
    Sleep()
}

func main() {
    pets := []Sleeper{new(Cat), new(Dog)}
    for _, x := range pets {
        x.Sleep()
    }
}

翻译完毕。

我觉得前半段,即组合和嵌入可以给我们未来如果要用面向对象的思想去写go的话,提供了个不错的想法。后半段interface大家肯定再熟悉不过了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值