golang面向对象
发布时间:2020-12-16 18:43:34 所属栏目:大数据 来源:网络整理
导读:golang可以实现面向对象,C++能做的,golang基本也可以做。 1.简单继承 golang用组合来实现继承,父类实例的作为子类的匿名成员即可。 继承了父类的成员变量和成员方法。 同名的成员方法,无论完整函数签名是否相同,父类方法均被隐藏。 同名的变量,子类优
|
golang可以实现面向对象,C++能做的,golang基本也可以做。 1.简单继承 golang用组合来实现继承,父类实例的作为子类的匿名成员即可。 继承了父类的成员变量和成员方法。 同名的成员方法,无论完整函数签名是否相同,父类方法均被隐藏。 同名的变量,子类优先,父类的必须加上父类类型才能访问。 e.HumanSayHi()
在正常的设计中,不要出现同名的情况。
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{}的区别: 自定义的对象,在作为函数参数的时候,依赖默认是值传递的。接受者可以看做特殊的函数参数,与函数传递参数是一样的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
