拓展的方法
通常使用复合和继承
GO不支持继承
LSP子类交换原则 Go不支持显示类型转换,所以LSP对GO无效
只有当子类可以替换掉父类, 软件单位的功能不受到影响时,父类才能真正被复用, 而子类也能够在父类的基础上增加新的行为。
GO不支持继承 因为是显示类型转换
内嵌不支持访问子类方法和数据 不支持重载
继承
package extension_test
import (
"fmt"
"testing"
)
type Pet struct {
}
func (p *Pet) Speak(){
fmt.Print("...")
}
func (p *Pet) SpeakTo(host string) {
p.Speak()
fmt.Println(" ",host)
}
type Dog struct{
p *Pet
}
func (d *Dog) Speak(){
fmt.Println("Wang!")
}
func (d *Dog) SpeakTo(host string) {
d.Speak()
fmt.Print(" ",host)
}
func TestDog(t *testing.T) {
dog := new(Dog)
dog.SpeakTo("HaiBao")
}