小编Uni*_*eak的帖子

为什么私有部分被视为接口?

我正在阅读Grady Booch的书" 面向对象分析和应用程序设计"第三版.在第94页,Booch说:

我们可以将一个类的接口分为四个部分:

  1. 公共:所有客户都可以访问的声明
  2. 受保护:只能由类本身及其子类访问的声明
  3. 私有:只能由类本身访问的声明
  4. 包:只能由同一包中的类访问的声明

我可以理解为什么保护声明可以被认为是一个接口,因为类的子类也是这个类的客户端.

但我不明白为什么私人声明可以被视为接口.请让我高兴.

oop interface

5
推荐指数
1
解决办法
91
查看次数

附加到具有相同基础数组的两个切片,为什么会产生结果?

这是一些 Go 书籍中的代码片段。

func incr(s []int) {
    s = append(s, 0)
    for i := range s {
        s[i]++
    }
}

func main() {
    s1 := []int{1, 2}
    s2 := s1
    s2 = append(s2, 3)

    incr(s1)
    incr(s2)

    fmt.Print(s1, s2) // "[1, 2][2, 3, 4]"
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么结果是“[1, 2][2, 3, 4]”。

基于https://golang.org/doc/ effective_go#slices 中的两点:

切片保存对基础数组的引用,如果将一个切片分配给另一个切片,则两个切片都引用同一个数组

如果函数采用切片参数,则调用者可以看到它对切片元素所做的更改,类似于将指针传递给底层数组

这是我想象应该发生的事情:

  1. 首先,s1 和 s2 都有相同的底层数组 [1, 2]
  2. 将 3 追加到 s2 后,底层数组变为 [1, 2, 3]。但 s1 仍然只看到 [1, 2]
  3. 之后incr(s1),s1 被追加 0,所有项递增,结果 s1 变为 [2, …

append go slice

-2
推荐指数
1
解决办法
503
查看次数

标签 统计

append ×1

go ×1

interface ×1

oop ×1

slice ×1