Golang基础-面向对象

面向对象

1.面向对象的引入

【1】Golang语言面向对象编程说明:
(1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
(2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Gelang是基于struct来实现OOP特性的。
(3)Golang面向对象编程非常简洁,去掉了传统OOP语言的方法重载、构造函数和析构函数、隐藏的this指针等等
(4)Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends 关键字,继承是通过匿名字段来实现。

【2】结构体的引入:

具体的对象:

一位老师:珊珊老师: 姓名:赵珊珊   年龄:31岁   性别 :女 ...... 

可以使用变量来处理:

package main
import "fmt"
func main(){
	//珊珊老师: 姓名:赵珊珊   年龄:31岁   性别 :女 ......
	var name string = "赵珊珊"
	var age int = "18"
	var sex string = "女"

	//小王老师: 姓名:隔壁王   年龄:38岁   性别 :男 ......
	var name2 string = "隔壁王"
	var age2 int = "38"
	var sex string = "男"
}

缺点:
(1)不利于数据的管理、维护
(2)老师的很多属性属于一个对象,用变量管理太分散了

2.结构体

【1】结构体、结构体对象的引入:
案例:老师结构体
在这里插入图片描述

后续实践中按照自己的需求定义结构体即可

【2】代码:

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Teacher struct{
	//变量名字大写外界可以访问这个属性
	Name string
	Age int
	School string
}
func main(){
	//创建老师结构体的实例、对象、变量
	var t1 Teacher //var a int
	fmt.Println(t1) //在未赋值时默认值:{ 0 }
	t1.Name = "隔壁王"
	t1.Age = 38
	t1.School = "清华大学"
	fmt.Println(t1)
	fmt.Println(t1.Age + 10)
}

在这里插入图片描述

3.内存分析

在这里插入图片描述

4.结构体实例的创建方式

【1】方式1:直接创建:

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Teacher struct{
	//变量名字大写外界可以访问这个属性
	Name string
	Age int
	School string
}
func main(){
	//创建老师结构体的实例、对象、变量
	var t1 Teacher //var a int
	fmt.Println(t1) //在未赋值时默认值:{ 0 }
	t1.Name = "隔壁王"
	t1.Age = 38
	t1.School = "清华大学"
	fmt.Println(t1)
	fmt.Println(t1.Age + 10)
}

【2】方式2:

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Teacher struct{
	//变量名字大写外界可以访问这个属性
	Name string
	Age int
	School string
}
func main(){
	//创建老师结构体的实例、对象、变量:
	var t Teacher = Teacher{"赵珊珊",18,"黑龙江大学"}
	fmt.Println(t)
	//t.Name = "赵珊珊"
	//t.Age = 18
	//t.School = "黑龙江大学"
	fmt.Println(t)
}

在这里插入图片描述

【3】方式3:返回的是结构体指针:

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Teacher struct{
	//变量名字大写外界可以访问这个属性
	Name string
	Age int
	School string
}
func main(){
	//创建老师结构体的实例、对象、变量:
	var t *Teacher = new(Teacher)
	//t是指针,t其实指向的就是地址,应该给这个地址的指向的对象的字段赋值
	(*t).Name = "隔壁王"
	(*t).Age = 38 //*的作用:根据地址取值
	//为了符合程序员的编程习惯,go提供了简化的赋值方式
	t.School = "清华大学" //go编译器底层对t.School转化(*t).School = "清华大学",推荐此方式
	fmt.Println(*t)
}

【4】方式4:返回的是结构体指针:

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Teacher struct{
	//变量名字大写外界可以访问这个属性
	Name string
	Age int
	School string
}
func main(){
	//创建老师结构体的实例、对象、变量:
	var t *Teacher = &Teacher{"隔壁王",38,"清华大学"}
	//(*t).Name = "隔壁王"
	//(*t).Age = 38
	//t.School = "清华大学"
	fmt.Println(*t)
}

5.结构体之间的转换

【1】结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字、个数和类型)

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Student struct {
	Age int
}
type Person struct {
    Age int
}
func main(){
    var s Student = Student{10}
	var p Person = Person{10}
	s = Student(p)
	fmt.Println(s)
	fmt.Println(p)
}

在这里插入图片描述

【2】结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转

package main
import "fmt"

//定义老师结构体,将老师中的各个属性 统一放入结构体中管理
type Student struct {
	Age int
}
type Stu Student 

func main(){
   var s1 Student = Student{19}
   var s2 Stu = Stu{19}
   s1 = Student(s2)
   fmt.Println(s1)
   fmt.Println(s2)
}

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值