前言
面向对象概念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)
}
复制代码