美文网首页
golang-面向对象

golang-面向对象

作者: 6a91e15c5cde | 来源:发表于2018-04-06 11:07 被阅读23次

    思考:go语言不支持继承与多态的优点与缺点是什么

    • go语言只支持封装,不支持继承与多态
    • go语言没有class,只有struct
    • go语言如何实现方法

    结构的定义

    type treeNode struct {
          value   int
          left, right  *treeNode
    }
    

    示例1

    package main
    
    import "fmt"
    
    type treeNode struct {
        value int
        left,right *treeNode
    }
    
    func main(){
        var root treeNode
        fmt.Printf("%v",root)
    }
    
    输出:
    {0 <nil> <nil>}
    

    示例2

    思考:
    go语言函数内部,为什么可以返回局部变量
    go语言的局部变量是分配在栈上还是堆上
    go语言的垃圾回收机制是怎样的

    自定义工厂函数
    函数返回了局部变量

              3
    
    0                      5
            2        0
    
    package main
    
    import "fmt"
    
    type treeNode struct {
        value int
        left,right *treeNode
    }
    
    
    func createTreeNode(value int) *treeNode {
            //函数内返回了一个局部变量
        return &treeNode{value:value}
    }
    
    func main(){
        var root treeNode
        root = treeNode{value:3}
        root.left = &treeNode{}
        root.right = &treeNode{5,nil,nil}
        root.right.left = new(treeNode)
            //使用工厂函数创建了一个node
        root.left.right = createTreeNode(2)
    
        fmt.Printf("%v",root)
    }
    

    示例3
    go语言的方法(接收者)

    package main
    
    import "fmt"
    
    type treeNode struct {
        value int
        left,right *treeNode
    }
    
    
    func (node treeNode) Print(){
        fmt.Printf("%v\n",node.value)
    }
    
    func (node *treeNode) SetValue(value int){
        node.value = value
    }
    
    func (node *treeNode) traverse(){
        //中序遍历
        if node == nil {
            return
        }
    
        node.left.traverse()
        node.Print()
        node.right.traverse()
    }
    
    func createTreeNode(value int) *treeNode {
        return &treeNode{value:value}
    }
    
    func main(){
        var root treeNode
        root = treeNode{value:3}
        root.left = &treeNode{}
        root.right = &treeNode{5,nil,nil}
        root.right.left = new(treeNode)
        root.left.right = createTreeNode(2)
    
        root.left.SetValue(10)
        root.left.Print()
        root.Print()
    
        root.traverse()
    }
    

    相关文章

      网友评论

          本文标题:golang-面向对象

          本文链接:https://www.haomeiwen.com/subject/mybjhftx.html