Update
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# 01-interfaces - 接口定义与实现
|
||||
|
||||
## 知识点讲解
|
||||
|
||||
### 接口定义
|
||||
|
||||
```go
|
||||
type Shape interface {
|
||||
Area() float64
|
||||
Perimeter() float64
|
||||
}
|
||||
```
|
||||
|
||||
### 接口实现
|
||||
|
||||
```go
|
||||
type Rectangle struct {
|
||||
Width float64
|
||||
Height float64
|
||||
}
|
||||
|
||||
func (r Rectangle) Area() float64 {
|
||||
return r.Width * r.Height
|
||||
}
|
||||
|
||||
func (r Rectangle) Perimeter() float64 {
|
||||
return 2 * (r.Width + r.Height)
|
||||
}
|
||||
```
|
||||
|
||||
**注意**:Go中接口是隐式实现的,不需要显式声明
|
||||
|
||||
### 多态
|
||||
|
||||
```go
|
||||
func printShapeInfo(s Shape) {
|
||||
fmt.Printf("面积: %.2f\n", s.Area())
|
||||
fmt.Printf("周长: %.2f\n", s.Perimeter())
|
||||
}
|
||||
|
||||
rect := Rectangle{Width: 10, Height: 5}
|
||||
circle := Circle{Radius: 7}
|
||||
|
||||
printShapeInfo(rect) // 可以传递Rectangle
|
||||
printShapeInfo(circle) // 也可以传递Circle
|
||||
```
|
||||
|
||||
### 空接口
|
||||
|
||||
```go
|
||||
var any interface{}
|
||||
any = 10
|
||||
any = "hello"
|
||||
any = []int{1, 2, 3}
|
||||
```
|
||||
|
||||
### 重要提示
|
||||
|
||||
- 接口定义一组方法签名
|
||||
- 任何类型只要实现了接口的所有方法,就自动实现了该接口
|
||||
- 空接口 `interface{}` 可以持有任何类型的值
|
||||
- 接口类型可以包含零个或多个方法
|
||||
|
||||
## 学习目标
|
||||
|
||||
完成本练习后,你将:
|
||||
- ✅ 掌握接口的定义方式
|
||||
- ✅ 学会实现接口
|
||||
- ✅ 理解多态的概念
|
||||
- ✅ 了解空接口的用法
|
||||
|
||||
## 练习说明
|
||||
|
||||
打开 `main.go`,根据注释提示填充代码,完成后运行 `go test -v` 验证答案。
|
||||
Reference in New Issue
Block a user