Go言語での継承の実現方法
Go言語ではオブジェクト指向プログラミングにおける継承の概念はなく、構造体の埋め込みや結合を使うことで同様の効果を得ることができる。
構造体の中に構造体を埋め込むことで継承のような効果を得ることができる。 子の構造体は親構造体のフィールド/メソッドにアクセスすることができる。
簡単な例で説明しますと
package main
import "fmt"
// 父结构体
type Parent struct {
name string
age int
}
// 父结构体方法
func (p *Parent) sayHello() {
fmt.Println("Hello, I'm", p.name)
}
// 子结构体
type Child struct {
Parent // 嵌入父结构体
school string
}
// 子结构体方法
func (c *Child) goToSchool() {
fmt.Println(c.name, "is going to", c.school)
}
func main() {
// 创建子结构体对象
child := Child{
Parent: Parent{
name: "Tom",
age: 10,
},
school: "ABC School",
}
// 访问父结构体字段和方法
fmt.Println(child.name) // 输出:Tom
fmt.Println(child.age) // 输出:10
child.sayHello() // 输出:Hello, I'm Tom
// 访问子结构体字段和方法
fmt.Println(child.school) // 输出:ABC School
child.goToSchool() // 输出:Tom is going to ABC School
}
親構造体ParentにnameフィールドとsayHelloメソッドを持たせ定義しました。 その後、継承を実装するために親構造体を埋め込むことで子構造体Childを定義しました。 子構造体には独自のschoolフィールドとgotoschoolメソッドがあります。
main関数内では、子構造体オブジェクトchildを作成し、オブジェクトを介して親構造体のフィールドやメソッド、子構造体自身のフィールドやメソッドにアクセスできます。