package main
import (
"fmt"
)
func main(){
// 1.创建Person类型
p1 := Person{name:"王二狗",age:30}
fmt.Println(p1.name,p1.age) // 父类对象,访问父类的字段属性--王二狗 30
p1.eat() //父类的方法,吃窝窝头
// 2.创建Student类型
s1 := Student{Person:Person{name:"ruby",age:18},school:"第三中学"}
fmt.Println(s1.name,s1.age) //子类对象,可以直接访问父类的字段(其实就是提升字段)--ruby 18
fmt.Println(s1.school) //子类对象,访问自己新增的字段属性--第三中学
s1.eat() //子类对象,访问父类的方法--父类的方法,吃窝窝头,没有重写前是该结果,重写后是下面的结果
s1.study() //子类对象,访问自己新增的方法--子类新增的方法,学生学习啦。。。
s1.eat() //如果存在方法的重写,子类对象访问重写的方法--子类重写的方法:吃炸鸡和啤酒。。。
}
//1.定义一个“父类”
type Person struct {
name string
age int
}
//2.定义一个“子类”
type Student struct {
Person //结构体嵌套,模拟继承性
school string
}
//3.方法
func (p Person) eat(){
fmt.Println("父类的方法,吃窝窝头")
}
func (s Student) study(){
fmt.Println("子类新增的方法,学生学习啦。。。")
}
func (s Student) eat(){
fmt.Println("子类重写的方法:吃炸鸡和啤酒。。。")
}
//结果
王二狗 30
父类的方法,吃窝窝头
ruby 18
第三中学
子类重写的方法:吃炸鸡和啤酒。。。
子类新增的方法,学生学习啦。。。
子类重写的方法:吃炸鸡和啤酒。。。
image.png
网友评论