前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Go 语言社区】面向对象

【Go 语言社区】面向对象

作者头像
李海彬
发布2018-03-20 12:02:52
7360
发布2018-03-20 12:02:52
举报
文章被收录于专栏:Golang语言社区

面向对象

Go是面向对象的,但没有如下概念:

  • class类
  • extends继承
  • implements实现

我们首先看看Go使用type来表达类型,type关键词定义了一个新的类型,声明作为一个struct,在struct中每个字段可以有一个名称(如下面的Name 和Main),或另外一个struct:

type weatherData struct {

Name string `json:"name"`

}

所有类型都是平等地创建,定义类型的方法是如下定义,不像Java中在Class中定义:

type Door struct {

opened bool

}

func (d *Door) Open() {

d.opened = true

}

func (d *Door) Close() {

d.opened = false

}

这是Door结构类型中有open()和close()两个方法。类似Java的setter/getter。

对于初始类型也可以这样创建:

type Door bool

func (d *Door) Open() {

*d = true

}

func (d *Door) Close() {

*d = false

}

这里是将初始类型bool赋值为true或fals的两个方法。

接口是Go语言的重要特点,其重要性超过协程,它和Java接口有些类似,如下:

In Java:

interface Switch {

void open();

void close();

}

In Go:

type OpenCloser interface {

Open()

Close()

}

与Java的接口不同的是,Go的接口是不需要显式声明继承的,它是隐式通过编译器根据方法签名匹配的,比如,在Java中实现接口Switch需要编写代码:

public class SwitchImpl implements Switch{ //实现具体内容}

而在Go中接口是隐式通过编译器实现的,前面type Door bool我们已经定义了Door这个类型有两个方法Open和Close,而这里有一个接口type OpenCloser interface申明了两个方法也是Open和Close,编译器也就认为Door implements OpenCloser了。

Go的接口与实现关系是一种隐式满足implicit satisfaction,如果一个类型type定义实现了一个接口的所有方法,那么就认为这个type满足了接口, 隐式满足Implicit satisfaction ==无显式 "implements"代码。它是一种duck typing的Structural subtyping,好处是:

  • 更少依赖
  • 不会造成纷繁类型继承层次
  • 天然的组合特性 非继承

从Go的接口我们看出Go是注重组合超过继承。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档