17丨扩展与复用

扩展与复用

复合

与其他主要编程语言的差异
Go不支持继承,但可以通过复合的方式来复用

匿名类型嵌⼊

与其他主要编程语⾔的差异
它不是继承,如果我们把“内部 struct ”看作⽗类,把“外部 struct” 看作⼦类,
会发现如下问题:
1. 不⽀持⼦类替换
2. ⼦类并不是真正继承了⽗类的⽅法
• ⽗类的定义的⽅法⽆法访问⼦类的数据和⽅法
 
package ch11

import (
    "fmt"
    "testing"
)

type Pet struct { // Pet 类
}

func (p *Pet) Speak() { // Pet 类的Speak方法
    fmt.Print("...")
}

func (p *Pet) SpeakTo(host string) { // Pet 类的SpeakTo方法
    p.Speak() // 调用
    fmt.Println(" ", host)
}

type Dog struct { //再次定义一个Dog类
    Pet // 父类
}

func (d *Dog) Speak() { // Dog类的Speak 方法
    fmt.Print("Wang~") // 不支持子类替换
}

func TestDog(t *testing.T) {
    dog := new(Dog)
    dog.SpeakTo("Wen") //...  Wen
    dog.Speak()        //Wang~-
}

 这里的Speak() 方法并没有重载父类的方法

 

posted @ 2021-01-23 16:20  元贞  阅读(66)  评论(0)    收藏  举报