go语言学习笔记(第3章)—面向对象编程

来源:转载


一个典型的类型系统包括: 基础类型: byte, int, bool, float等 复合类型:数组,结构体,指针 可以指向任意对象的类型(Any类型) 值语义和引用语义 面向对象,即所有具备面向对象特征的类型 接口 在GO语言中可以为任意类型(包括内置类型)添加相应的方法 上面的例子中我们定义了一个新类型 Integer ,Integer和int没有本质区别,只是为内置的int增加了一个方法Less(),可以让整型像一个普通的类一样使用了。 在GO语言中没有隐藏的this指针 1) 方法施加的目标显示传递,没有被隐藏起来 2) 方法施加的目标不需要非得是指针,也不用非得叫this GO语言和C语言一样,类型都是基于值传递的,要想改变变量的值,只能在函数中传递指针。 1. 类型系统 1.1. 值语义和引用语义 值语义和引用语义的差别在于赋值 b = a b.Modify() 如果b的修改不会影响a的值,那么此类型属于值类型。如果会影响a的值,那么此类型是引用类型。 GO语言中的大多数类型都属于值语义,包括: 基本类型: byte, int, bool, float32, float64和string等 复合类型: array, struct, pointer等 GO语言中的类型的值语义表现的非常彻底。 1.2. 结构体 GO语言放弃了包括继承在内的大量面向对象特性,只保留了组合这个最基础的特性。 组合不能算面向对象的特性,因为在C语言这样的过程式编程语言中,也有结构体,也有组合。组合只是形式复合类型的基础。 GO语言中结构体的使用方式与C语言并没有什么明显的不同。 2. 初始化 在GO语言中,未进行显式初始化的变量都会被初始化为该类型的零值,例如bool类型的零值为false, int类型的零值为0, string类型的零值为空字符串。 结构体有多种初始方法,如下: 3. 匿名组合 确切的说,GO语言也提供了继承,但是采用了组合的文法,所以我们将其称为匿名组合 4. 可见性 GO语言对关键字的增加非常吝啬,没有private, protected, public这样的关键字。要使某个符号对其他包可见,需要将该符号定义为以大写字母开头。 5. 接口 GO语言的接口并不是其他语言中所提供的接口概念。JAVA现在的接口是侵入式接口, GO的接口时非侵入式的。 在GO语言中,一个类只要实现了接口要求的所有函数,我们就说这个类实现了该接口。 在GO语言中,接口赋值在GO语言中分为如下两种情况: 1. 将对象实例赋值给接口 2. 将一个接口赋值给另一个接口



分享给朋友:
您可能感兴趣的文章:
随机阅读: