golang面向对象

fall221 · · 3180 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang可以实现面向对象,C++能做的,golang基本也可以做。

1.简单继承

golang用组合来实现继承,父类实例的作为子类的匿名成员即可。

    继承了父类的成员变量和成员方法。

    同名的成员方法,无论完整函数签名是否相同,父类方法均被隐藏。

    同名的变量,子类优先,父类的必须加上父类类型才能访问。

e.Human.SayHi()


在正常的设计中,不要出现同名的情况。


2.多重继承。

组合多个基类即可


3.多态行为

用接口实现

package main
import (
    "fmt"
)
 
// abstract base
type IA interface {
    Kaka()int
}

// child a
type A struct{
}
func (a *A)Kaka()int{
    return 3
}

// child b
type B struct{
}
func (b *B)Kaka()int{
    return 1
}

func Fac(i int) IA{
    var x IA
    if i>0{
//        x=new(A) // 注意赋值规则: interface型的变量相当于基类指针
        x=&A{} // 注意赋值规则: interface型的变量相当于基类指针
    }else{
        x=&B{}
    }
    return x
}
func main() {
    i:=Fac(0)// input 0 or 1
    fmt.Println(i.Kaka())
}


4.组合语义

用命名的组合,与匿名组合实现的继承语义区分开



a1:=&A{}

a1:=A{}的区别:
第一个是指针,第二个是值,尽管指针没有用->而是用.,但指针还是指针。

自定义的对象,在作为函数参数的时候,依赖默认是值传递的。接受者可以看做特殊的函数参数,与函数传递参数是一样的。






有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:fall221

查看原文:golang面向对象

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3180 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传