ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Go学习之入门篇(十一)

2021-12-09 21:02:38  阅读:185  来源: 互联网

标签:十一 Animal fmt Human 入门篇 func Go dog1 Name


1.Go语言中面对对象的表示和封装

Go语言一样有面对对象的思想在其中,我们直接通过一个例子来感受Go语言一个类的定义方式和封装方式。

package main

import "fmt"

type Human struct {
	Name string
	Gender string
}

// 给属性绑定一些方法
func (this *Human) SetName(name string) {
	this.Name = name;
}

func (this *Human) GetName() string{
	return this.Name
}

func (this *Human) Show() {
	fmt.Println("this Human name is ", this.Name)
	fmt.Println("this Human gender is ", this.Gender)
}

func main()  {
	// 声明一个Human类对象
	man := Human{Name: "tom", Gender: "female"}
	man.Show();
}

运行结果:

this Human name is  tom
this Human gender is  female

这是一个类的简单定义方式,我在这里定义了一个Human类,在主方法中声明了一个名为man的Human类对象,在这里有一些小细节,首先是(this *Human)而不是(this Human),这是保证方法最终操作的是调用该方法的对象,而不是该对象的拷贝。每个方法的首字符为大写,表示的是该方法对外开放(其他包也可见),这个与java中的public关键词的作用类似,同理,如果首字符是小写字母,则代表不对外开放(其他包不可见),对于属性值(Name和Gender)亦然(大写字母为首字符的对外开放,小写字母不对外开放)。

对象的初始化方式除了以上代码的给出方式,也可以先声明再赋值,如:

package main

import "fmt"

type Human struct {
	Name string
	Gender string
}

// 给属性绑定一些方法
func (this *Human) SetName(name string) {
	this.Name = name;
}

func (this *Human) GetName() string{
	return this.Name
}

func (this *Human) Show() {
	fmt.Println("this Human name is ", this.Name)
	fmt.Println("this Human gender is ", this.Gender)
}

func main()  {
	// 声明一个Human类对象
	var man Human
	man.Name = "tom"
	man.Gender = "female"

	man.Show()
}

运行结果:

this Human name is  tom
this Human gender is  female

可以达到相同的效果。

2.Go语言中的面对对象继承

为了更好的说明继承的特点,我们列举最好理解的动物和猫狗之间的关系来说明,首先我们先定一个Animal类。

package main

import "fmt"

type Animal struct {
	Name string
	Gender string
}

func (this *Animal) Walk() {
	fmt.Println("the animal is walk")
}

func (this *Animal) Run(){
	fmt.Println("the animal is run")
}

func (this *Animal) Show() {
	fmt.Println("this Animal name is ", this.Name)
	fmt.Println("this Animal gender is ", this.Gender)
}

紧接着,我们定义一个dog类,他应该具有Animal的基本特征。

type Dog struct {
	Animal // 表示继承了Animal类
	Color string
}

func (this *Dog) Run(){
	fmt.Println("the dog run fast")
}

func (this *Dog) Bark()  {
	fmt.Println("dog is barking")
}

且有一个重写的方法Run和一个独特的方法Bark,除此之外,还有一个额外的属性Color,我们写一个测试来看看Dog类的对象都有哪些方法。

func main()  {
	dog1 := Dog{Animal: Animal{Name: "yellowdog", Gender: "female"}, Color:"yellow"}

	dog1.Walk()
	dog1.Run()
	dog1.Bark()
	dog1.Show()
}

运行结果:

the animal is walk
the dog run fast
this Animal name is  yellowdog
this Animal gender is  female

可以看到dog1对象不仅拥有Dog类的方法,也具有Animal类的方法,而且调用的是覆盖了新Run方法。对于继承了一个类的对象的初始化方法,除了以上方法,同样可以采用先声明后赋值的方式

func main()  {
	var dog1 Dog
	dog1.Animal = Animal{Name: "yellowdog", Gender: "female"}
	dog1.Color = "yellow"
	dog1.Walk()
	dog1.Run()
	dog1.Bark()
	dog1.Show()
}

总结,go语言同样具有面对对象的思想,且创建改类的对象可以采用 类名{属性名:值, 。。。}的形式,对于继承某一个类,可以直接将该类作为属性即可。

标签:十一,Animal,fmt,Human,入门篇,func,Go,dog1,Name
来源: https://blog.csdn.net/q160336802/article/details/121842569

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有