c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang如何继承

更新时间:2023-06-23

前言

在Go语言中,继承是通过嵌入结构体来实现的。Go语言没有传统面向对象语言中的类继承的概念,而是通过组合和嵌入来实现代码的复用。本文将介绍如何在Go语言中实现继承。

嵌入结构体

在Go语言中,可以通过嵌入结构体来实现继承的效果。嵌入结构体是指将一个结构体类型嵌入到另一个结构体类型中,从而让被嵌入的结构体的字段和方法可以被嵌入结构体的类型访问和调用。

1. 通过嵌入结构体实现字段继承

type Parent struct {
    name string
}

type Child struct {
    Parent // 嵌入Parent结构体
    age    int
}

func main() {
    child := Child{
        Parent: Parent{name: "John"},
        age:    10,
    }

    fmt.Println(child.name) // 可以直接访问Parent中的字段
    fmt.Println(child.age)
}

2. 通过嵌入结构体实现方法继承

type Printer struct {
    name string
}

func (p *Printer) Print() {
    fmt.Println("Printing...")
}

type Scanner struct {
    Printer // 嵌入Printer结构体
}

func main() {
    scanner := Scanner{
        Printer: Printer{name: "Epson"},
    }

    scanner.Print() // 可以直接调用Printer中的方法
}

覆盖和扩展

通过嵌入结构体实现继承后,可以对父结构体的字段和方法进行覆盖和扩展。

3. 覆盖

type Parent struct {
    name string
}

type Child struct {
    Parent
    age int
}

func (p *Parent) Speak() {
    fmt.Println("Hello, I am parent.")
}

func (c *Child) Speak() {
    fmt.Println("Hello, I am child.")
}

func main() {
    child := Child{
        Parent: Parent{name: "John"},
        age:    10,
    }

    child.Speak() // 调用Child结构体中的Speak方法
}

4. 扩展

type Parent struct {
    name string
}

func (p *Parent) Speak() {
    fmt.Println("Hello, I am parent.")
}

type Child struct {
    Parent
    age int
}

func (c *Child) Speak() {
    c.Parent.Speak() // 调用父结构体的方法
    fmt.Println("Hello, I am child.")
}

func main() {
    child := Child{
        Parent: Parent{name: "John"},
        age:    10,
    }

    child.Speak() // 调用Child结构体中的Speak方法
}

总结

在Go语言中,通过嵌入结构体来实现继承的效果。通过嵌入结构体,可以继承父结构体的字段和方法,并且可以对其进行覆盖和扩展。这种继承方式使得代码更加简洁和灵活,同时减少了继承带来的复杂性。