6.5. 第3节:方法继承

未匹配的标注
本文档最新版为 2023,旧版本可能放弃维护,推荐阅读最新版!

3 方法继承

现在我们已经实现了为结构体添加成员(属性),和方法,并且实现了成员属性的继承,那么方法能否继承呢?

package main

import "fmt"

type person7 struct{
    id int
    name string
    age int
    sex string
}

type student7 struct {
    person7

    class int
    score int
    addr string
}

func (p *person7)Print(){
    fmt.Printf("编号:%d\n",p.id)
    fmt.Printf("姓名:%s\n",p.name)
    fmt.Printf("年龄:%d\n",p.age)
    fmt.Printf("性别:%s\n",p.sex)

}

func main() {

    p:=person7{1001,"孙尚香",32,"女"}
    p.Print()

    s:=student7{person7{1002,"糜夫人",32,"女"},302,100,"巴蜀"}

    //子类继承于父类  可以继承结构体的成员(属性)  也可以继承父类的方法
    //父类不能继承于子类
    s.Print()

}

方法练习:

package main

import (
    "fmt"
)

/*
记者:我是记者  我的爱好是偷拍 我的年龄是34 我是一个男狗仔
程序员:我叫孙权 我的年龄是23 我是男生 我的工作年限是 3年
 */

//父类
type Human struct {
    name string
    age  int
    sex  string
}

//记者子类
type Reper struct {
    Human

    hobby string
}

//程序员子类
type Dever struct {
    Human

    worktime int
}

//父类方法
func (h *Human) SayHi() {
    fmt.Printf("大家好,我叫%s,我今年%d岁,我是%s生", h.name, h.age, h.sex)
}

//记者的方法
func (r *Reper) SayHello() {
    //继承父类方法
    r.SayHi()
    fmt.Printf(",我的爱好是:%s\n", r.hobby)

}

//程序员的方法
func (d *Dever) SayHello() {
    d.SayHi()
    fmt.Printf(",我的工作年限是:%d年\n", d.worktime)
}
func main() {

    r:=Reper{Human{"卓伟",40,"男"},"偷拍"}
    r.SayHello()

    d:=Dever{Human{"图灵",32,"男"},10}
    d.SayHello()

}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~