Go语言中通过结构体匿名字段实现方法的继承和重载

Go语言中的结构体可以定义匿名字段。Go语言中没有对象,但是结构体却有大量对象的功能。并且用匿名字段的确可以实现对象的继承和重载。

package main  
import  "fmt"  
 
type A  struct{  
    x  int  
}  
 
type A1  struct {  
    A  
}  
 
func main(){  
    a  :  = A1{A{  1}}  
    fmt.Println(a.x, a.A.x)  
}

在这个代码中,A1得到了A的所有字段,A称为匿名字段。A1同样也得到A的所有方法,这个可称为继承:

package main  
import  "fmt"  
type A  struct{}  
 
func (self  *A)  do() {  
    fmt.Println(  "A.do")    
}  
 
type A1  struct {  
      
}  
func main(){  
    var a A1  
    a.  do()    
}

在A1中能定义和A中重名的方法,这个可称为重载:

package main  
import  "fmt"  
 
type A  struct{  
}  
 
func (self  *A)  do() {  
    fmt.Println(  "A.do")    
}  
 
type A1  struct {  
    A  
}  
 
func (self  *A1)  do() {  
    fmt.Println(  "A1.do")  
}  
 
func main(){  
    var a A1  
    a.  do()   
    a.A.  do()  
}

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python之time模块的时间戳、时间字符串格式化与转换

Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y

Go 用 interface 模拟多态

多态是C这种语言中的概念,是指对不同的子类对象运行自己定义的方法。在Go语言中没有类的概念,但仍然可以使用structinterface来模拟实现类的功能。下面这个例子演示如何使用Go来模拟C中的多态行为。packagemainimport"fmt"//首先定义了一

Django中Admin中的一些参数配置

设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable