Go中类的封装

        形式 Func (实例 结构体名)函数名(参数)返回值{}

        Go中的类即为struct

代码示例:

package main

import "fmt"

//Person类
type Person struct {
	//成员属性
	name  string
	age   int
	score float32
}

//方法,绑定到类上
func (P1 Person) test1() {
	fmt.Println("姓名:", P1.name)
	fmt.Println("年龄:", P1.age)
	fmt.Println("得分:", P1.score)
}

/*
	指针绑定和普通绑定的区别
*/
//普通绑定
func (P2 Person) test2() {
	P2.name = "test2"
}

//指针绑定
func (P3 *Person) test3() {
	P3.name = "test3"
}

func main() {
	//创建实例
	person1 := Person{
		name:  "小明",
		age:   20,
		score: 99.0,
	}
	person2 := person1

	//测试绑定方法
	person1.test1()
	/*
		测试指针绑定和普通绑定的区别
	*/
	fmt.Println("---------------------")
	fmt.Println("普通绑定")
	fmt.Println("姓名修改前")
	fmt.Println("姓名:", person1.name)
	person1.test2()
	fmt.Println("姓名修改后")
	fmt.Println("姓名:", person1.name)
	fmt.Println("---------------------")
	fmt.Println("指针绑定")
	fmt.Println("姓名修改前")
	fmt.Println("姓名:", person2.name)
	fmt.Println("姓名修改后")
	person2.test3()
	fmt.Println("姓名:", person2.name)
	fmt.Println("---------------------")
}

运行结果:

 Go中的嵌套与继承

        结构体中包含另一个结构体,表示嵌套。

        结构体中直接包含结构体名,表示继承该结构体。将其变量和方法均继承过来。

        继承时虽然没有定义字段名,但是会自动创建一个默认的同名字段。为了在子类中依然可以操作父类,因为子类父类可能出现同名字段。

代码示例:

package main

import "fmt"

//定义一个类
type Human struct {
	name string
	age  int
}

//父类方法
func (H Human) test1() {
	fmt.Println("父类的方法")
}

//嵌套
type Student struct {
	H     Human
	score float32
}

//继承
type Teacher struct {
	Human
	gender string
}

func main() {

	//嵌套
	student := Student{
		H: Human{
			name: "小明",
			age:  20,
		},
		score: 99.0,
	}
	fmt.Println("嵌套定义的实例信息:")
	fmt.Println(student)

	//继承
	teacher := Teacher{}
	teacher.name = "王老师"
	teacher.age = 40
	teacher.gender = "男"
	fmt.Println("继承定义的信息:")
	fmt.Println(teacher)
	//子类调用父类方法
	teacher.test1()

}

运行结果: