zoukankan      html  css  js  c++  java
  • go 内嵌对象类型

    demo1

    // Sample program to show how to embed a type into another type and
    // the relationship between the inner and outer type.
    package main
    
    import (
        "fmt"
    )
    
    // user defines a user in the program.
    type user struct {
        name  string
        email string
    }
    
    // notify implements a method that can be called via
    // a value of type user.
    func (u *user) notify() {
        fmt.Printf("Sending user email to %s<%s>
    ",
            u.name,
            u.email)
    }
    
    // admin represents an admin user with privileges.
    type admin struct {
        user  // Embedded Type
        level string
    }
    
    // main is the entry point for the application.
    func main() {
        // Create an admin user.
        ad := admin{
            user: user{
                name:  "john smith",
                email: "john@yahoo.com",
            },
            level: "super",
        }
    
        // We can access the inner type's method directly.
        ad.user.notify()
    
        // The inner type's method is promoted.
        ad.notify()
    }

    输出

    Sending user email to john smith<john@yahoo.com>
    Sending user email to john smith<john@yahoo.com>

    demo2

    // Sample program to show how to embed a type into another type and
    // the relationship between the inner and outer type.
    package main
    
    import (
        "fmt"
    )
    
    // user defines a user in the program.
    type user struct {
        name  string
        email string
    }
    
    // notify implements a method that can be called via
    // a value of type user.
    func (u *user) notify() {
        fmt.Printf("Sending user email to %s<%s>
    ",
            u.name,
            u.email)
    }
    
    // admin represents an admin user with privileges.
    type admin struct {
        user  // Embedded Type
        level string
    }
    
    func (u *admin) notify() {
        fmt.Printf("admin method!
    ")
    }
    
    // main is the entry point for the application.
    func main() {
        // Create an admin user.
        ad := admin{
            user: user{
                name:  "john smith",
                email: "john@yahoo.com",
            },
            level: "super",
        }
    
        // We can access the inner type's method directly.
        ad.user.notify()
    
        // The inner type's method is promoted.
        ad.notify()
    }

    输出

    Sending user email to john smith<john@yahoo.com>
    admin method!

    demo3

    // Sample program to show how embedded types work with interfaces.
    package main
    
    import (
        "fmt"
    )
    
    // notifier is an interface that defined notification
    // type behavior.
    type notifier interface {
        notify()
    }
    
    // user defines a user in the program.
    type user struct {
        name  string
        email string
    }
    
    // notify implements a method that can be called via
    // a value of type user.
    func (u *user) notify() {
        fmt.Printf("Sending user email to %s<%s>
    ",
            u.name,
            u.email)
    }
    
    // admin represents an admin user with privileges.
    type admin struct {
        user
        level string
    }
    
    // main is the entry point for the application.
    func main() {
        // Create an admin user.
        ad := admin{
            user: user{
                name:  "john smith",
                email: "john@yahoo.com",
            },
            level: "super",
        }
    
        // Send the admin user a notification.
        // The embedded inner type's implementation of the
        // interface is "promoted" to the outer type.
        sendNotification(&ad)
    }
    
    // sendNotification accepts values that implement the notifier
    // interface and sends notifications.
    func sendNotification(n notifier) {
        n.notify()
    }

    输出

    Sending user email to john smith<john@yahoo.com>
  • 相关阅读:
    神经网络(2)---neurons and the brain
    P2P system:How Chord tackles failures
    如何成为更好的自己
    P2P system: Chord
    P2P system: FastTrack and BitTorrent
    P2P system: GNUTELLA
    P2P system: Napster
    P2P system: Introduction
    幸福公开课(2)
    MTV与MVC 多对多表的创建方式 前后端传输数据编码格式 ajax 批量插入数据 自定义分页器
  • 原文地址:https://www.cnblogs.com/sea-stream/p/10357586.html
Copyright © 2011-2022 走看看