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()
}
运行结果: