其他分享
首页 > 其他分享> > Go学习之入门篇(十一)

Go学习之入门篇(十一)

作者:互联网

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