6.5. 第3节:方法继承
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()
}