golang实现面向对象抽象方法
我们知道golang没有类的概念,只有结构体,也就是组合的思想,所以没有java的继承。如果我们想要使用golang实现继承,直接看代码
type BaseIntf interface {
handle(str string)
}
type Base struct {
sendMsg func(string) string
}
func newBase() *Base {
base := &Base{}
base.sendMsg = base.sendMsg1
return base
}
func (b *Base) handle(str string) {
fmt.Printf("base handle function, str:%q\n", str)
b.sendMsg(str)
}
func (b *Base) sendMsg1(msg string) string {
fmt.Printf("base sendMsg function, str:%q\n", msg)
return msg
}
type BaseChild struct {
*Base
}
func newBaseChild() *BaseChild {
child := &BaseChild{
Base: newBase(),
}
child.Base.sendMsg = child.sendMsg1
return child
}
//func (b *BaseChild) handle(str string) {
// fmt.Printf("child handle function, str:%q\n", str)
// b.sendMsg(str)
//}
func (b *BaseChild) sendMsg1(msg string) string {
fmt.Printf("child sendMsg function, str:%q\n", msg)
return msg
}
func main() {
h := newBaseChild()
h.handle("test")
}