gpt4 book ai didi

Go 和面向对象范式

转载 作者:IT王子 更新时间:2023-10-29 02:29:09 26 4
gpt4 key购买 nike

给定以下界面...

type Person struct {
name, gender string
}

type Citizen interface {
Create(name string) Citizen
GetName() string
GetGender() String
SayHello() String
}

... 以及以下 MaleFemale 实现:

type Male Person

func (m *Male) Create(name) Citizen {
return &Person{name, "male"}
}

func (m *Male) GetName() string {
return m.name
}

func (m *Male) GetGender() string {
return m.gender
}

func (m *Male) SayHello() string {
return "Hello (male voice)"
}

type Female Person

func (f *Female) Create(name) Citizen {
return &Person{name, "female"}
}

func (f *Female) GetName() string {
return f.name
}

func (f *Female) GetGender() string {
return f.gender
}

func (m *Female) SayHello() string {
return "Hello (female voice)"
}

func main() {
var p1 Person = &Male{}
var p2 Person = &Female{}

p1 = p1.Create("Joe")
p2 = p2.Create("Heidi")

log.Printf("%s is a %s",p1.GetName(), p1.GetGender())
log.Printf("%s says %s",p1.GetName(), p1.SayHello())
log.Printf("%s is a %s",p2.GetName(), p2.GetGender())
log.Printf("%s says %s",p2.GetName(), p2.SayHello())
}

因为只有Create是性别特定的,有没有办法让MaleFemale继承方法的共同实现 GetNameGetGender?

最佳答案

嵌入 PersonMaleFemale类型并将基本方法推送到 Person .

type Male struct {
Person
}

type Female struct {
Person
}

func (m *Person) GetName() string {
return m.Name
}

func (m *Person) GetGender() string {
return m.Gender
}

func main() {
var c Citizen
c = CreateMale("Joe")
fmt.Println(c.GetName(), c.GetGender(), "\n", c.SayHello())
c = CreateFemale("Jane")
fmt.Println(c.GetName(), c.GetGender(), "\n", c.SayHello())
}

请在此处查看完整示例:https://play.golang.org/p/GZcG-n_YpM

这使用接口(interface) Citizen而不是类型 Person如果这不是您要找的内容,请告诉我。

关于Go 和面向对象范式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45990335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com