前一篇说了基于structmethod实现,现在我们来看下struct中的method继承。

//定义一个person类型  
type Person struct {  
   Name string  
  Age int  
  Sex string  
}  
//获取person的年龄  
func (Person *Person)getAge() int {  
   return Person.Age  
}  
//获取person的性别  
func (Person *Person)getSex() string {  
   return Person.Sex  
}  
//定义一个Worker类型  
type Worker struct {  
   Person  
  Job string  
  Age int  
}  
//获取Worker的年龄  
func (Worker *Worker)getAge() int {  
   return Worker.Age  
}  
func main() {  
  Person := Person{"andy",9,"男"}  
  andy := Worker{Person,"搬砖工",3}  
  fmt.Printf("%s:%s,职业:%s,年龄:%d,工龄:%d\r\n",andy.Name,andy.Sex,andy.Job,andy.Person.getAge(),andy.getAge())  
  //andy:男,职业:搬砖工,年龄:9,工龄:3  
}

上面这个示例,我们首先定义一个person类型。然后定义了一个worker类型,继承了person。但是对于worker又希望有自己的age属性,与getAge方法。那么这个时候我们可以重写person的属性与方法。但是在使用的时候,如果我们想要使用person中已经被worker重写的方法或者属性,我们就需要指定到person,比如andy.Person.getAge()。这样直接告诉程序,我们需要取得person中的getAge方法。

期待一起交流

image


旧梦发癫
678 声望76 粉丝

PHP、Golang