zoukankan      html  css  js  c++  java
  • Golang 继承

    Golang 继承

    案例引入

    type Person struct {
    	Name string
    	Age  int
    }
    //Go继承使用匿名嵌套
    type Student struct {
    	Person
    	sNo int
    }
    func (person *Person) say() {
    	fmt.Println("person say")
    }
    func (person *Person) talk() {
    	fmt.Println("person talk")
    }
    func (student *Student) work() {
    	fmt.Println("student work")
    }
    //重写Person talk 方法
    func (student *Student) talk() {
    	fmt.Println("student talk")
    }
    func main() {
    	student := Student{Person{
    		"小明", 12,
    	}, 12}
    	student.say()
    	student.work()
    	student.talk()
    	//匿名结构体字段可以简化访问
    	fmt.Print(student.Name)
    }
    

    注意事项

    1. 结构体可以使用嵌套匿名结构体所有的字段和方法,即:首字母大写或者小写的字段,方法,都可以使用

    2. 匿名结构体字段访问可以简化

    3. 当结构体和匿名结构体有相同的字段或则方法时, 采用就近原则访问, 如果希望访问匿名结构体的字段和方法, 可以通过匿名结构体名来区分

      	student.talk()
      	//通过字段访问匿名结构体的方法
      	student.Person.talk()
      
    4. 结构体嵌入多个匿名结构体(多重继承), 如果两个匿名结构体有相同的字段和方法(同时结构体本身没有相同的字段和方法), 在访问时, 就必须指明匿名结构体名字,否则编译报错

      type Person struct {
      	Name string
      	Age  int
      }
      type Student struct {
      	Name string
      }
      type xueza struct {
      	Student
      	Person
      }
      func main() {
      	x := xueza{Student{"zs"},
      		Person{"ls", 10}}
      	x.Name //报错
      }
      
    5. 如果一个结构体嵌套了一个有名的结构体,这种模式就是组合, 如果时组合关系, 那么在访问组合的结构体的字段或方法时, 必须带上结构体的名字, 类似于Java中的嵌套类

      type Person struct {
      	Name string
      	Age  int
      }
      type Student struct {
      	p   Person
      	sNo int
      }
      func main() {
      	s := &Student{Person{"zs", 10}, 10}
      	//不能通过s.Name访问
      	fmt.Println(s.p.Name)
      }
      

    特殊案例

    GO支持匿名基本类型, 但是只能有一个相同类型的

    type Student struct {
    	int //go支持匿名基本类型
    	sNo int
    }
    func main() {
    	s := &Student{10, 20}
    	fmt.Println(s)
    }
    
  • 相关阅读:
    洛谷 P3413 【萌数】
    ANOI 2009 【同类分布】
    概率编程语言
    人类的视觉能力基本上是出生后逐渐习得的
    关“视觉神经系统是怎么形成的?”的思考
    MIPS指令集相关
    zookeeper源码之服务端
    zookeeper服务端
    c语言之结构
    c语言之函数
  • 原文地址:https://www.cnblogs.com/kikochz/p/13490963.html
Copyright © 2011-2022 走看看