首页 技术 正文
技术 2022年11月20日
0 收藏 542 点赞 4,376 浏览 1040 个字

我们总结一下前面看到的:Go 没有类,而是松耦合的类型、方法对接口的实现。

面向对象语言最重要的三个方面分别是:封装继承多态,在 Go 中它们是怎样表现的呢?

Go实现面向对象的两个关键是structinterface,结构代替类,因为Go语言不提供类,但提供了结构体或自定义类型,方法可以被添加到结构体或自定义类型中。结构体之间可以嵌套,类似继承。而interface定义接口,实现多态性。

封装(数据隐藏)

和别的面向对象语言有 4 个或更多的访问层次相比,Go 把它简化为了 2 层:

  • 包范围内的:通过标识符首字母小写,对象只在它所在的包内可见

  • 可导出的:通过标识符首字母大写,对象对所在包以外也可见

继承

Go没有显式的继承,而是通过组合实现继承,内嵌一个(或多个)包含想要的行为(字段和方法)的结构体;多重继承可以通过内嵌多个结构体实现。

多态

多态是运行时特性,而继承则是编译时特征,也就是说,继承关系在编译时就已经确定了,而多态则可以实现运行时的动态绑定。Go用接口实现多态,某个类型的实例可以赋给它所实现的任意接口类型的变量。类型和接口是松耦合的,并且多重继承可以通过实现多个接口实现。Go 接口不是 Java 和 C# 接口的变体,而且,接口间是不相关的,并且是大规模编程和可适应的演进型设计的关键。

另外Go没有构造函数,如果一定要在初始化对象的时候进行一些工作的话,可以自行封装产生实例的方法。实例化的时候可以初始化属性值,如果没有指明则默认为系统默认值。加&符号和new的是指针对象,没有的则是值对象,在传递对象的时候要根据实际情况来决定是要传递指针还是值。

多重继承

多重继承指的是类型获得多个父类型行为的能力,它在传统的面向对象语言中通常是不被实现的(C++ 和 Python 例外)。因为在类继承层次中,多重继承会给编译器引入额外的复杂度。但是在 Go 语言中,通过在类型中嵌入所有必要的父类型,可以很简单的实现多重继承

有关方法重载就是一个类中可以有相同的函数名称,但是它们的参数是不一致的,在java、C++中这种做法普遍存在。Go中如果尝试这么做会报重新声明(redeclared)错误,但是Go的函数可以声明不定参数,这个非常强大。

func Println(a ...interface{}) (n int, err error) {
return Fprintln(os.Stdout, a...)
}

其中a ...interface{}表示参数不定的意思。如果要根据不同的参数实现不同的功能,要在方法内检测传递的参数。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,493
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295