前言

面向对象概念struct

重温结构体

type BaseNum struct {
	Num1 int
	Num2 int
}
复制代码
BaseNum两个数的集合Num1Num2

给结构体添加方法

func (baseNum *BaseNum) setNum1(num int)  {
	baseNum.Num1 = num
}

func (baseNum *BaseNum) setNum2(num int)  {
	baseNum.Num2 = num
}

func (num *BaseNum) add() {
	fmt.Printf("result: %d\n", num.Num1 + num.Num2)
}
复制代码
func(baseNum *BaseNum)*BaseNum*

继承

被嵌入的结构体嵌入的结构体
BaseNum
type AddNum struct {
	BaseNum
}

func ( addNum *AddNum ) Operation() int {
	addNum.add()
	return addNum.Num1 + addNum.Num2
}
复制代码

重写

方法名称重复相同名称方法
type AddNum struct {
	BaseNum
}

func ( addNum *AddNum ) Operation() int {
	addNum.add()
	return addNum.Num1 + addNum.Num2
}

func ( addNum *AddNum ) add() int {
	return addNum.Num1 + addNum.Num2
}

func main() {
	addNum := AddNum{BaseNum{Num1:3,Num2:4}}
	ret1 := addNum.add()
	fmt.Println(ret1) // 7
}
复制代码

完整代码

package main

import "fmt"

type BaseNum struct {
	Num1 int
	Num2 int
}

func (baseNum *BaseNum) setNum1(num int)  {
	baseNum.Num1 = num
}

func (baseNum *BaseNum) setNum2(num int)  {
	baseNum.Num2 = num
}

func (num *BaseNum) add() {
	fmt.Printf("result: %d\n", num.Num1 + num.Num2)
}

type AddNum struct {
	BaseNum
}

func ( addNum *AddNum ) Operation() int {
	addNum.add()
	return addNum.Num1 + addNum.Num2
}

func ( addNum *AddNum ) add() int {
	return addNum.Num1 + addNum.Num2
}

func main() {
	// v1
	num := BaseNum{}
	num.setNum1(1)
	num.setNum2(2)

	num.add()

	// v2
	addNum := AddNum{BaseNum{Num1:3,Num2:4}}
	addNum.Operation()
	ret1 := addNum.add()
	fmt.Println(ret1)
}
复制代码