美文网首页GolangGolang 开发者深入浅出golang
golang 使用组合的方式实现继承

golang 使用组合的方式实现继承

作者: 火头陀 | 来源:发表于2018-12-13 11:33 被阅读7次

    摘要

    golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合

    组合使用注意项

    • 使用匿名引入的方式来组合其他struct
    • 默认优先调用外层方法
    • 可以指定匿名struct以调用内层方法

    代码事例

    package main
    
    import (
        "fmt"
    )
    
    type People struct{}
    
    type People2 struct{}
    
    func (p *People) ShowA() {
        fmt.Println("showA")
        p.ShowB()
    }
    func (p *People) ShowB() {
        fmt.Println("showB")
    }
    
    func (p *People) ShowC() {
        fmt.Println("showC")
    }
    
    func (p *People) ShowD() {
        fmt.Println("People:showD")
    }
    
    func (p *People2) ShowD() {
        fmt.Println("People2:showD")
    }
    
    type Teacher struct {
        People  //组合People
        People2 //组合People2
    }
    
    func (t *Teacher) ShowB() {
        fmt.Println("teacher showB")
    }
    func (t *Teacher) ShowC(arg string) {
        fmt.Println(arg)
    }
    
    func main() {
        t := Teacher{}
    
        //print showA
        //print showB
        t.ShowA()
    
        //print teacher showB
        t.ShowB()
    
        //print showB
        t.People.ShowB()
    
        //print test
        t.ShowC("test")
    
        //print showC
        t.People.ShowC()
    
        //因为组合方法中多次包含ShowD,所以调用时必须显示指定匿名方法
        //print People2:showD
        t.People2.ShowD()
    }
    
    

    相关文章

      网友评论

        本文标题:golang 使用组合的方式实现继承

        本文链接:https://www.haomeiwen.com/subject/njpvhqtx.html