个人对golang的面向对象的理解------接口(interface)

本文介绍了Golang如何通过struct和interface实现面向对象编程,并通过具体示例展示了如何定义对象属性、对象方法及接口,以及如何通过接口调用对象方法。

golang是面向对象语言,但是他并没有class之类的关键字,他是通过struct和interface组合实现了面向对象的概念。

面向对象的函数,我们一般要传对象指针,为什么呢?因为函数一般是操作对象的属性的,而只有全对象指针时,对象的属性才会被改变,否则不会改变对象属性本身。例子后续补上

转载请注明出处:http://www.cnblogs.com/SSSR/p/6351661.html

在golang中面向对象的实现顺序:

1.先定义struct,是对象的属性值,如:

type Person struct {
  id int
  name string
}

2.定义对象需要实现的函数,如:

func (self Person) codingEveryday() string {
  return fmt.Sprintf("user %d, %s write bug every day.", self.id, self.name)
}

3.定义接口,选择不同的函数,定义很多个接口(不同的接口适应不同的需求,还可以起到保护函数的安全性),如:

type CodeMonkey interface {
  codingEveryday() string
}

4.将struct实例化,然后赋值给接口,就可以通过接口参数调用struct(对象)函数,如:

var monkey CodeMonkey = Person{1, "Tom"}
fmt.Println(monkey.codingEveryday())

5.关于继承,我觉得可能是体现在struct(对象)定义的时候使用的匿名变量上,这个还没有深入研究,等研究明白了补充上。

 

以上为个人理解,如有错误还请指正。

实例:

 

interface.go

package interfacelearning

import "fmt"

type CodeMonkey interface {
    codingEveryday() string
}

type Parent interface {
    washingDiaper() string
}

type TwoPeople interface{
	codingEveryday() string
	washingDiaper() string
}
type Person struct {
    id   int
    name string
}

func (self Person) codingEveryday() string {
    return fmt.Sprintf("user %d, %s write bug every day.", self.id, self.name)
}

func (self Person) washingDiaper() string {
    return fmt.Sprintf("user %d, %s take care of his baby.", self.id, self.name)
}

func MonkeyFather() {
    var monkey CodeMonkey = Person{1, "Tom"}
    fmt.Println(monkey.codingEveryday())

    var father Parent = Person{2, "John"}
    fmt.Println(father.washingDiaper())

	var two TwoPeople=Person{3, "yuzp"}
	fmt.Println(two.codingEveryday())
	fmt.Println(two.washingDiaper())
}

  

 interface_test.go

package interfacelearning
import "fmt"
import "testing"
var print=fmt.Println


func TestMonkeyFather(t *testing.T){
	MonkeyFather()
	
	print("这是一个测试!")
}

  

 

转载于:https://www.cnblogs.com/SSSR/p/6351661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值