码迷,mamicode.com
首页 > 其他好文 > 详细

Go 面向对象概念

时间:2015-09-29 22:05:47      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

1. 对象

  - 任意简单的内置数据类型

  - 任意复杂的结构体

  - 表示具体的事物 / 抽象的规则 / 计划 / 事件 等.

2. 对象的状态

  - 用数值来描述, 如长方体的长和宽等.

3. 对象的操作

  - 用于改变对象的状态, 操作就是对象的行为.

  - GO语言中称为Method(方法), Method 就是在 函数(function) 前面增加了一个接收者(Receiver)对象. 将操作和对象关联起来了.

    - 定义:   func (recv receiver_type) methodName(args)(rets){}    Receiver 可以是: 内置类型/自定义类型/结构体/指针类型

    - 多个Method可以同名, 只要接收者不同, 就是不同的Method.(类似于重载吧)

    - Method可以访问接收者的字段, 而不需要将字段作为参数传入Method, 就像在struct中访问字段一样.

    - 普通类型作为Receiver,是值传递;  指针类型作为Receiver, 将传递引用.

package main

import (
    "fmt"
    "math"
)

type rect struct {
    width  int
    height int
}
type circle struct {
    radius float32
}

func (recv rect) area() int {
    return recv.width * recv.height
}
func (recv circle) area() float32 {
    return recv.radius * recv.radius * math.Pi
}
func main() {
    r1 := rect{4, 3}
    r2 := rect{30, 15}
    fmt.Println(r1.area(), r2.area())
    c := circle{5}
    fmt.Println(c.area())
}

   - Receiver

    - 匿名Receiver, 省略了receiver的名字(类型没有省,所以可以判断), 此时不能定义同名的方法(应该是会造成无法将操作和对象绑定). 

   - Method 继承

    - go中可以通过匿名字段实现字段继承;  如果匿名字段实现了一个Method(或者说是这个Method的Receiver), 那么包含这个匿名字段的struct对象也能调用该Method.

    - 可以重写继承的方法, 对象会像处理匿名字段一样, 优先处理外部同名Method.

Go 面向对象概念

标签:

原文地址:http://www.cnblogs.com/roger9567/p/4846394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!