golang面向对象

来源:互联网 发布:淘宝爱互动在哪里 编辑:程序博客网 时间:2024/05/16 08:55

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

1.简单继承

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

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

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

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

e.Human.SayHi()


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


2.多重继承。

组合多个基类即可


3.多态行为

用接口实现

package mainimport (    "fmt") // abstract basetype IA interface {    Kaka()int}// child atype A struct{}func (a *A)Kaka()int{    return 3}// child btype 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{}的区别:
第一个是指针,第二个是值,尽管指针没有用->而是用.,但指针还是指针。

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





0 0
原创粉丝点击