• GeekConsole.net
    2019-03-28
    不一定非要走 面向对象的路数。新的语言,新的编程习惯。
    
     7
  • 大王叫我来巡山
    2019-03-18
    重载(overload)是指同一个类里有函数名相同但是参数不同的函数,重写(override)指子类重新实现父类已有的方法
     1
     6
  • stopper
    2019-05-30
    为什么总有一种,看文档比视频更好的感觉,不合理
    
     4
  • 风吹过
    2019-06-03
    一个简单的例子,绕得云里雾里,自己的思路都不清晰,还真不如看文档

    作者回复: 有好的文档给同学们一起推荐一下吧

     1
     3
  • kaixiao7
    2019-03-16
    老师, 在Java的例子中 Dog extends Pet 并重写了Speak()方法, 这应该不叫重载而是方法覆盖或者重写吧?
     2
     2
  • xinsuonline
    2020-02-03
    我觉得老师思路挺清晰的,这节课下来听明白了
    
    
  • 147258
    2020-02-02
    感觉,代码逻辑,代码编写,讲课的流程度,都是磕磕绊绊的, 看的好痛苦~~
    
    
  • 思维
    2020-01-09
    这一课确实有点绕 也看出老师费心了
    
    
  • 张帅
    2019-10-31
    所以是没办法重载Pet的Speak方法?

    作者回复: GO语言是不支持继承的,所以也就无法对父类方法override

    
    
  • 碧雪天虹
    2019-10-17
    父类:
    1. 把要重载的方法用函数式参数存起来(充当虚表)
    2. 调用方法从虚表查找实现, 没有的话就给个默认实现
    3. 调用实现方法

    子类:
    1. 继承父类方法
    2. 新增一个构造函数, 用于修改虚表, 覆盖父类实现
    3. 创建对象并调用构造函数, 就可以愉快地玩耍了

    package extension

    import (
        "fmt"
        "testing"
    )

    type Pet struct {
        speakHandle func()
        speakToHandle func(string)
    }

    func (p *Pet) Speak() {
        if p.speakHandle == nil {
            p.speakHandle = func() {
                fmt.Print("...")
            }
        }
        p.speakHandle()
    }

    func (p *Pet) SpeakTo(host string) {
        if p.speakToHandle == nil {
            p.speakToHandle = func(_host string) {
                p.Speak()
                fmt.Println(_host)
            }
        }
        p.speakToHandle(host)
    }

    type Dog struct {
        Pet
    }

    func (d *Dog) Ctor() *Dog {
        overrideSpeakHandle(d)
        //overrideSpeakToHandle(d)
        return d
    }

    func overrideSpeakHandle(d *Dog) {
        if d.speakHandle == nil {
            d.speakHandle = func() {
                fmt.Print("Wang!")
            }
        }
    }

    func overrideSpeakToHandle(d *Dog) {
        if d.speakToHandle == nil {
            d.speakToHandle = func(_host string) {
                d.Speak()
                fmt.Println(_host + "...")
            }
        }
    }

    func TestDog(t *testing.T) {
        pet := Pet{}
        dog := new(Dog).Ctor()
        pet.SpeakTo("Xu")
        dog.SpeakTo("Xu")
    }

    展开
    
    
  • X中倪
    2019-08-01
    老师可以帮忙指导指导一下吗?万分感谢,看看我这么理解有问题没得。
    https://zhuanlan.zhihu.com/p/76206479
    
    
  • Bug总是难免的
    2019-05-09
    kaixiao7说的对
    
    
我们在线,来聊聊吧