• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

6.2Go匿名字段

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Golang匿名字段:可以像访问字段成员那样,访问匿名字段方法,go编译器自动查找。

package main

import "fmt"

type Student struct {
    id   int
    name string
}

type Teacher struct {
    //匿名字段
    Student
}

func (s1 *Student) Play() {
    fmt.Printf("Student地址:%p,值是%v\n", s1, s1)
    fmt.Println("我是个学生,但是我就爱玩儿,你能奈我何")
}
func main() {
    t1 := &Teacher{Student{1, "银角大王吧"}}
    //两种方式一样效果
    /*
        t1 := &Teacher{
            Student{
                1,
                "银角大王吧",
            },
        }
    */
    fmt.Printf("t1的内存地址:%p\n", &t1)
    //通过t1变量,执行结构体Student的方法,查找
    t1.Play() //  t1 -> Teacher -> *Student
}

通过匿名字段可以实现

重写 override

1.1. Go继承实战

写一个学生管理系统,学生类别有(小学生、中学生、大学生),既然是学生群体都可以(查询成绩、设置成绩)

package main

import "fmt"

//学生结构体
type Student struct {
    Name  string
    Age   int
    Score int
}

//显示学生个人信息方法,接收指针类型
func (stu *Student) ShowInfo() {
    fmt.Printf("学生姓名:%v 年龄=%d 成绩=%d\n", stu.Name, stu.Age, stu.Score)
}

//设置学生成绩
func (stu *Student) SetScore(score int) {
    stu.Score = score
}

//小学生群体 单词pupil
type Pupil struct {
    //小学生的属性完全可以继承Student学生的属性
    Student //继承匿名字段
}

//小学生独有方法
func (p *Pupil) testing() {
    fmt.Println("小学生正在考试中..")
}

//大学生结构体,同样的也有学生的常见属性
type Graduate struct {
    Student
}

//大学生独有的方法
func (g *Graduate) testing() {
    fmt.Println("大学生正在答辩考试中...")
}

func main() {
    p1 := &Pupil{Student{"小学生一号", 7, 99}}
    p1.testing()
    p1.ShowInfo()
    p1.SetScore(100)
    p1.ShowInfo()
    fmt.Println("-----------")
    g1 := &Graduate{Student{"大学生一号", 22, 50}}
    g1.testing()
    g1.ShowInfo()
    g1.SetScore(60)
    g1.ShowInfo()
}

继承给Go程序带来了代码的复用性提高了,代码的可维护性、扩展性更高了!

注意点:

如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承
如果一个struct嵌套了另一个【有名】的结构体,那么这个模式叫做组合

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
sublime3 配置go的开发环境发布时间:2022-07-10
下一篇:
Go语言文件操作发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap