Go 的多继承
继承 让一个类型自动的获取到它的父类的所有行为与属于,而多继承则使得一个类型可以自动的获取到多个父类的所有行为与属于,比如,以前我们有相机,后来有了手机,再到现在,我们所有人用的都是带相机的手机,那么,相机是一个父类,它具有属于相机所特有的属性与行为,比如它有镜头,可以拍照片;手机又是一个父类,它具有相机没有的行为,比如打电话,发短信,但是它又不具有相机的一些行为,比如拍照片等;而我们的相机手机,它同时继承自相机与手机,所以它就同时具有了打电话,发短信而且还能拍照片的功能。
在其它语言中,我们通常都是通过定义接口的方式来实现这种能力,但是在Go中,我们与单继承的作法是一模一样的,继承多少父类,就只需要多少个匿名的父类字段即可,比如上面关于手机、相机以及相机手机的例子,使用Go来实现的话,可以是这样的:
package main
import "fmt"
type Camera struct {}
func (_ Camera) takePicture() string {
return "Clicked"
}
type Phone struct {}
func (_ Phone) call() string {
return "Ring Ring"
}
type CameraPhone struct {
Camera
Phone
}
func main() {
cp := new(CameraPhone)
fmt.Println("A CameraPhone can take a picture: ", cp.takePicture())
fmt.Println("A CameraPhone also can make a call: ", cp.call())
}输出结果为:
A CameraPhone can take a picture: Clicked
A CameraPhone also can make a call: Ring Ring我们可以看到,CameraPhone*的实例*cp*同时具有了 *Camera 的 takePicture 方法,也具有了Phone 的 call 方法。
评论已关闭