有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的;继承,就是指 class 之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了。

  作为集大成者的 Go 语言,自然不会在面向对象上面无所作为。相比较 java、C#、C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解。下面,我们不妨用三个简单的例子来说明一下 go 语言下的面向对象是什么样的。

封装特性

package main  

import "fmt"  

type data struct {
val int
} func (p_data *data) set(num int) {
p_data.val = num
} func (p_data *data) show() {
fmt.Println(p_data.val)
} func main() {
p_data := &data{4}
p_data.set(5)
p_data.show()
}

继承特性

package main  

import "fmt"  

type parent struct {
val int
} type child struct {
parent
num int
} func main() {
var c child c = child{parent{1}, 2}
fmt.Println(c.num)
fmt.Println(c.val)
}

多态特性

package main  

import "fmt"  

type act interface {
write()
} type xiaoming struct { } type xiaofang struct { } func (xm *xiaoming) write() {
fmt.Println("xiaoming write")
} func (xf *xiaofang) write() {
fmt.Println("xiaofang write")
} func main() {
var w act; xm := xiaoming{}
xf := xiaofang{} w = &xm
w.write() w = &xf
w.write()
}

最新文章

  1. ThinkPHP5 助手函数
  2. 替换 data.frame 中的特殊的值
  3. hdu3555
  4. iOS 使用Storyboard 和 xib时的一些知识
  5. JavaScript屏蔽Backspace键
  6. Android开发 将数据保存到SD卡
  7. linux 服务器更主板后无法识别网卡处理过程
  8. POJ 1564 Sum It Up(DFS)
  9. 郁闷的C小加(一)(后缀表达式)
  10. 20.23. xmlrpclib — XML-RPC client access — Python v2.7.5 documentation
  11. IOS中 init和initialize
  12. SSM框架原理,作用及使用方法(非原创)
  13. cannot be run because the QueueReader subsystem failed to load
  14. js filter 数组去重
  15. oracle安装教程及常用命令
  16. web中的乱码处理
  17. Windows 内存管理
  18. 如何永久关闭选项"Tools > Close Other Forms"
  19. Android 写一个Activity之间来回跳转的全局工具类(主要是想实现代码的复用)
  20. 猿团专访 |以技术推动发展 msup 成为企业经验智库

热门文章

  1. BoneBlack am335x利用SD卡烧写板卡上的emmc
  2. tkinter-clock实例
  3. java面试数据类型
  4. 为什么全部width:100%浏览器边缘存在留白?
  5. Spring的模块组成
  6. JavaSE基础之double数据类型的格式化
  7. 新的起点 Entry KINGSOFT
  8. Azure ServiceBus的消息中带有@strin3http//schemas.microsoft.com/2003/10/Serialization/�
  9. [POI2000]Repetitions
  10. hdu 2732 最大流 **