• Golang 嵌入类型以及公开的属性和方法的解释


    package main
    
    //当用接收者的类型是值类型的时候,只能调用或者传参为值类型,且只能在调用的时候实现值类型的方法
    //当接收者是指针的接收者的时候,可以调用所有的接口的方法集。
    //且 指针接受者的方法优先级最高,即使指针接收者可以调用值类型的方法,但是对于修改地址变量不生效。
    //外部类型的结构体会拥有嵌入的结构体的方法,并且方法可以在外部类型结构体中重写。
    
    //关于引入公开包中的是否公开属性,
    //1.大写开头的方法或者属性为外部可访问的属性和方法 小写则是私有
    //第一: 标识符才有公开或者未公开属性值没有。
    //第二 短变量操作符有能力捕获引用的类型,并创建一个为公开的类型的变量。
    //永远不能显示创建一个公开的变量,不过短变量声明操作符可以这么做
    import "fmt"
    
    //notifier 定义了一个通知类行为的接口
    type notifier interface {
        notify()
    }
    //user定义了一个用户类型
    type user struct {
        name string
        email string
    }
    
    func (u *user) notify ()  {
        fmt.Printf("Sending user email %s,%s\n",u.name,u.email)
    }
    
    type admin struct {
        user //嵌入类型
        level string
    }
    
    func (a *admin) notify()  {
        fmt.Printf("Sending admin email %s,%s \n",a.name,a.email)
    }
    
    func main() {
        ad:= admin{
            user:  user{
                    name: "John",
                    email: "John@yahoo.com",
            },
            level: "super",
        }
        sendNotification(&ad) //这里会程序会自己去找方法,如本身存在则直接执行,否则会去找父级的方法 否则报错!
        ad.user.notify() //调用父级类型的方法
        ad.notify() //调用自己的方法
    }
    func sendNotification(n notifier)  {
        n.notify()
    }
    
  • 相关阅读:
    Prony算法
    基于WeifenLuo.WinFormsUI.Docking界面布局控件的Winform框架
    C# 在父容器中显示子窗体
    如何识别高级的验证码
    我 .北漂的 80后男孩
    c# 主机和网络字节序的转换
    电网割集能量算法
    项目管理心得:一个项目经理的个人体会、经验总结
    Qt 登陆界面实现
    [ lucene FAQ ] 如何避免lucene queryparser中文分词的缺陷?[转]
  • 原文地址:https://www.cnblogs.com/ikai/p/16322592.html
Copyright © 2020-2023  润新知