Go语言 重写方法

类似于Java中的继承,子类继承并重写父类的方法,Go语言也提供了这样的实现。
Go语言中可以创建一个或者多个类型作为嵌入字段的自定义结构体,任何嵌入类型中的方法都可以当作该自定义结构体自身的方法被调用,从而间接实现子类继承父类的方式

在Go语言中,如果“子类”重写了“父类”的成员方法,需要在子类的成员方法中调用基类的同名成员方法,一定要以

子类名.父类名.重写方法名

这样显式的方法调用,而不是使用

子类名.重写方法名

这种调用继承方法的方式调用,这样会出现无限循环,即一直在调用子类的方法。

我们来看一个代码示例

//创建一个Birds类
type Birds struct {
   Name string  //具名字段(聚合)
}
//Birds类有三个方法
func (bird *Birds)HasFoot()  {
   fmt.Println(bird.Name," has feet!")
}

func (bird *Birds)HasEye()  {
   fmt.Println(bird.Name," has eye!")
}

func (bird *Birds)HasFlying()  {
   fmt.Println(bird.Name," can flying!")
}
//创建一个Ostrich类,并继承 Birds
type Ostrich struct {
   Birds //匿名字段(嵌入)
   Wings string  //具名字段(聚合)
}
//重写Base的Flying方法
func (ostrich *Ostrich)HasFlying()  {
   ostrich.Birds.HasFoot()   //显示调用父类Birds的方法
   ostrich.Birds.HasEye()     //显示调用父类Birds的方法
   ostrich.HasFoot()            //隐式调用父类Birds的方法
   ostrich.HasEye()              //隐式调用父类Birds的方法
   fmt.Println(ostrich.Name," can`t fly")
}

func main() {
   ostrich := new(Ostrich)
   ostrich.Name = "鸵鸟"
   ostrich.HasFlying() //调用子类的方法
}

下面会无限调用自己,形成死循环

func (ostrich *Ostrich)HasFlying()  {
    ostrich.HasFlying()  // 无限调用自己
    fmt.Println(ostrich.Name," can`t fly") // 永远不会执行到这里
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,914评论 1 32
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,239评论 25 709
  • 几个小的建议分享给大家,很实用: 一、静心回神、找到自己的天赋才华。 二、高标准不速成。 三、戒生定,定生慧。 第...
    金融嘉嘉阅读 3,290评论 0 0
  • 小女孩,不够20个 宝宝和小动物 植物和小饰品 水果等类 出生到成年的小女孩 莲花
    暖暖百合花阅读 1,508评论 2 1
  • 17岁,一个没有烦恼的年纪。想如何任性,都会放任自己,勇敢追逐自己想要的。 17岁,凉夏羞涩却为爱不顾一切 这个世...
    魔笛大公举阅读 4,160评论 7 6

友情链接更多精彩内容