• Golang之继承,多重继承(struct)


    热乎的代码来了

    package main
    
    import "fmt"
    
    /*
    继承
    一个结构体嵌到另一个结构体,称作组合
    匿名和组合的区别
    如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承
    如果一个struct嵌套了另一个【有名】的结构体,那么这个模式叫做组合
    如果一个struct嵌套了多个匿名结构体,那么这个结构可以直接访问多个匿名结构体的方法,从而实现多重继承
    */
    
    type Car struct {
        weight int
        name   string
    }
    
    func (p *Car) Run() {
        fmt.Println("running")
    }
    
    type Bike struct {
        Car
        lunzi int
    }
    type Train struct {
        Car
    }
    
    func (p *Train) String() string {
        str := fmt.Sprintf("name=[%s] weight=[%d]", p.name, p.weight)
        return str
    }
    
    func main() {
        var a Bike
        a.weight = 100
        a.name = "bike"
        a.lunzi = 2
        fmt.Println(a)
        a.Run()
    
        var b Train
        b.weight = 100
        b.name = "train"
        b.Run()
        fmt.Printf("%s", &b)
    }

     练习2

    package main
    
    import (
        "fmt"
        "time"
    )
    
    type Car struct {
        Name string
        Age  int
    }
    
    func (c *Car) Set(name string, age int) {
        c.Name = name
        c.Age = age
    }
    
    type Car2 struct {
        Name string
    }
    
    //Go有匿名字段特性
    type Train struct {
        Car
        Car2
        createTime time.Time
        //count int   正常写法,Go的特性可以写成
        int
    }
    
    //给Train加方法,t指定接受变量的名字,变量可以叫this,t,p
    func (t *Train) Set(age int) {
        t.int = age
    }
    
    func main() {
        var train Train
        train.int = 300 //这里用的匿名字段写法,给Age赋值
        //(&train).Set(1000)
        train.Car.Set("huas", 100 )
        train.Car.Name = "test" //这里Name必须得指定结构体
        fmt.Println(train)
    
    }
  • 相关阅读:
    设计模式-观察者模式
    idea 生成 protobuf
    springboot @Autowride 注入空 调用时报Null空指针
    Netty 服务端创建过程
    git failed to push some refs to
    SPI simp
    Controller之statefulset
    Service
    Controller之deployment
    rabbitmq“ Login was refused using authentication mechanism PLAIN”
  • 原文地址:https://www.cnblogs.com/pyyu/p/8259144.html
Copyright © 2020-2023  润新知