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