Go面向对象编程1——面向对象编程
Go 语言的代码是以包结构来组织的,且如果标示符(变量名,函数名,自定义类型等)如果以大写字母开头那么这些标示符是可以导出的,可以在任何导入了定义该标示符的包的包中直接使用。Go 语言中的面向对象和 C++,Java 中的面向对象不同,因为 Go 语言不支持继承,Go 语言只支持组合。
自定义类型
Go 语言的中结构体 struct
与 C++、JAVA 中的类 class
相似,但 Go 放弃了传统面向对象的诸多特性,只保留了组合。
- type typeName typeSpecification
其中,typeName
可以是一个包或者函数内唯一合法的 Go 标示符。typeSpecification
可以是任何内置的类型,一个接口或者是一个结构体。所谓结构体,它的字段是由其他类型或者接口组成。例如我们通过结构体定义了一下类型:
1 |
|
以上代码我们通过结构体自定义了类型 ColorPoint
,结构体中 color.Color
字段是 Color 包的类型 color,这个字段没有名字,所以被称为匿名的,也是嵌入字段。字段 x
和 y
是有变量名的,所以被称为具名字段。假如我们创建了类型 ColorPoint
的一个值 point
(通过语法:point := ColorPoint{}
创建),那么这些字段可以通过 point.Color
、point.x
、point.y
访问。其他面向对象语言中的"类 (class
)"、“对象 (object
)”、"实例 (instance
)"在 Go 语言中我们完全避开使用。相反的我们使用"类型 (type
)“和其对应的"值”,其中自定义类型的值可以包含方法。
定义了结构体后如何创建并初始化一个对象实例呢?Go 语言支持以下几种方法进行实现:
1 |
|
为了更加方便的创建对象,我们一般会使用一个全局函数来完成对象的创建,这和传统的“构造函数”类似。
1 |
|