# 接口组合与多态

URL: https://caijiao.org/go/03-structured/09-interface-polymorphism
Source: docs/go/03-structured/09-interface-polymorphism.md
Description: 本节介绍 Go 语言接口的组合与多态特性，帮助设计灵活且可扩展的代码结构。

## 1. 接口组合

一个接口可以嵌入一个或多个接口，实现接口的复合。

```go
type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

type ReadWriter interface {
    Reader
    Writer
}
````

`ReadWriter` 组合了 `Reader` 和 `Writer` 的方法。

## 2. 多态

多态允许不同类型通过接口实现相同方法，实现统一调用。

```go
type Speaker interface {
    Speak() string
}

type Dog struct{}
func (d Dog) Speak() string { return "Woof!" }

type Cat struct{}
func (c Cat) Speak() string { return "Meow!" }

func SaySomething(s Speaker) {
    fmt.Println(s.Speak())
}

SaySomething(Dog{})  // 输出：Woof!
SaySomething(Cat{})  // 输出：Meow!
```

## 3. 接口值的多态性

接口变量可以存储任何实现该接口的类型，实现动态调用。

---

接口组合和多态提升了代码的灵活性和扩展性。
