3 回答
TA贡献1829条经验 获得超13个赞
虚拟继承不仅解决了多重继承的问题,还赋予了我们多态性。
package main
import (
"fmt"
"math"
)
type Form interface {
Color() string
Area() float64
}
type form struct {
color string
}
func (f *form) Color() string {
return f.color
}
type Circle struct {
form
radius float64
}
func (k *Circle) Area() float64 {
return math.Pi * k.radius * k.radius
}
type Rectangle struct {
form
width, height float64
}
func (r *Rectangle) Area() float64 {
return r.width * r.height
}
func main() {
var forms [2]Form
forms[0] = &Circle{
form: form{ "black" },
radius: 5.0,
}
forms[1] = &Rectangle{
form: form{ "read" },
width: 2.0,
height: 3.0,
}
for _, f := range forms {
fmt.Printf("%s: %.2f\n", f.Color(), f.Area())
}
}
这里我们有一个数组,它们有一些共同点(Color和Area),我们可以在这个数组上迭代调用相同的函数,并且总是会发生正确的事情。
这只是多态的优点之一。它在大多数设计模式中扮演着重要的角色。
- 3 回答
- 0 关注
- 198 浏览
添加回答
举报