golang 面向对象编程
go语言中,虽然没有明确提出面向对象的概念,但是基于已有的语法设计,我们也可以写出面向对象的代码。go语言中的面向对象是借助struct
结构体实现的。值得一提的是,go语言中虽然没有class
关键字来表示类,但却有interface
来表示接口。
回顾结构体
type Person struct {name stringage int
}person := Person{"mike",18}
fmt.Println(person)
以上代码用结构体类型表示了一个人,用面向对象的思维来理解,name
和age
是两个成员变量。那么,我们就应该思考,如何编写成员方法
呢?
go语言是这样设计的:
func (person *Person) showInfo() {fmt.Printf("My name is %s , age is %d ",person.name,person.age)
}func (person *Person) setAge(age int) {person.age = age
}person := Person{"mike",18}
person.showInfo()
person.setAge(20)
fmt,Println(person)
在关键字func
和函数名之间加上一对小括号,写上与之关联的结构体类型的指针类型和变量名
,推荐写成指针类型的原因是,函数传递的形参不是指针类型的话,无法覆盖实参。
实际上,此时,showInfo()
,setAge()
就可以叫做成员方法了
。
继承
其他面向对象的语言,是使用extends
关键字来表示继承的,而go语言中继承的设计非常简单,不需要额外的关键字。
type Student struct {Personid intscore int
}func (student *Student) showInfo() {fmt.Println("I am a student ...")
}func (student *Student) read() {fmt.Println("read book ...")
}student := Student{Person{"jake",16},1001,99}
student.showInfo()
student.setAge(22)
student.read()
可以看到,在学生结构体中,我们使用到了Person
作为匿名变量,意思就是,Student继承自Person。我们除了继承了成员变量和成员方法之外,还可以为学生结构体增加成员方法,重写成员方法。
多态
package mainimport "fmt"type Human interface {speak(language string)
}type Chinese struct {}type American struct {}func (ch Chinese) speak(language string ) {fmt.Printf("speck %s\n",language)
}func (am American ) speak(language string ) {fmt.Printf("speck %s\n",language)
}func main() {var ch Humanvar am Humanch = Chinese{}am = American{}ch.speak("Chinese")am.speak("English")
}
面向接口编程,结构体中只要有和接口中定义的同名方法,就称该结构体是实现了哪个接口。
golang 面向对象编程相关推荐
- 第十章 Golang面向对象编程(上)
结构体 看一个养猫问题 张老太养了两只猫猫:一只名字叫小白,今年3岁,白色.还有一只叫小花,今年100岁,花色.请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色.如果用户输入的小猫 ...
- 【Golang面向对象编程-第一节】
文章目录 1. GO语言OOP概述 2. 封装的实现 封装的实现 3. 继承的实现 4. 多态的实现 4.1 接口概述 4.2 声明接口 4.3 实现接口 4.4 接口嵌套 4.5 类型断言的格式 G ...
- 【Golang第8章:面向对象编程】Go语言的结构体是什么,怎么声明;Golang方法的调用和声明;go语言面向对象实例,go语言工厂模式;golang面向对象的三大特性:继承、封装、多态
介绍 这个是在B站上看边看视频边做的笔记,这一章是Glang面向对象编程 这一章内容较多,内容有Go语言的结构体是什么,怎么声明:Golang方法的调用和声明:go语言面向对象实例,go语言工厂模式: ...
- go 面向对象编程-1
结构体 一个程序就是一个世界,有很多对象(变量) golang语言面向对象编程说明 golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.所以说golan ...
- Golang笔记—面向对象编程
工厂模式 说明 Golang 的结构体没有构造函数,通常可以使用工厂模式来解决这个问题. 看一个需求 一个结构体的声明是这样的: package model type Student struct { ...
- golang中的面向对象编程之一
1.golang中面向对象编程说明 2.结构体与结构体变量(实例/对象)的关系示意图 2.1.定义一个Cat结构体体验一把 //定义一个cat结构体,将cat的特性作为字段属性,放到结构体中 type ...
- Golang笔记-面向对象编程-多态/类型断言
面向对象编程-多态 基本介绍 变量(实例)具有多种形态.面向对象的第三大特征,在 Go 语言,多态特征是通过接口实现的.可 以按照统一的接口来调用不同的实现.这时接口变量就呈现不同的形态. 快速入门 ...
- Scala进阶之路-面向对象编程之类的成员详解
Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...
- golang面向对象思想和实现
golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class. 类声明 type Poem struct {Title stringAuthor string ...
最新文章
- java.vm.info_深入理解java虚拟机
- 深度学习 dns tunnel检测 使用统计特征 全连接网络——精度99.8%
- 从一个实例看javascript几种常用格式的转换
- no typehandler found for property XXXX 解决
- 命令行下 pdb 调试 Python 程序
- 中国电子银行网-互联网金融第一大网站
- 【渝粤教育】21秋期末考试网络市场调查与预测10143k2
- app上显示服务器数据加载失败,APP中的6种常见数据加载
- lgg7刷机包下载_LG G7ThinQ刷机包
- hotnets 2019 Using ground relays for low-latency wide-area routing in megaconstellations 阅读报告
- 软件工程-第三章-需求分析
- TM1640驱动程序
- Android studio打开机智云APP(自动生成)
- access字段属性设置下拉列表_CAD常用命令:ATTDEF(定义属性)
- mac插网线不能上网_我的Macbook插上网线为什么不能上网? – 手机爱问
- 查看计算机温度指令,如何查看电脑CPU的温度?查看CPU温度的两种方法
- 天耀18期 – 6.面向对象-类和对象【作业】.
- Web设计中最常用的10种色调以及示例演示
- hdu 1998 奇数阶魔方 规律
- 小何讲进程: 编写Linux守护进程方法详解