Go语言使用组合的方式实现多继承
2014-04-09 17:18
627 查看
在大多数面向对象的编程语言中多继承都是不支持的。因为在基于class的体系中,多继承极大地增加了编译器的复杂性。
Go语言使用组合的方式实现继承,因此也可以很简单的实现多继承。
//使用组合的方式实现多继承
type Phone struct{}
func (p *Phone) Call() string {
return "Ring Ring"
}
type Camera struct{}
func (c *Camera) TakeAPicture() string {
return "Click"
}
//多继承
type CameraPhone struct {
Camera
Phone
}
func structTest0803() {
cp := new(CameraPhone)
fmt.Println("Our new CameraPhone exhibits multiple behaviors ...")
fmt.Println("It exhibits behavior of a Camera: ", cp.TakeAPicture())
fmt.Println("It works like a Phone too: ", cp.Call())
/*Output:
Our new CameraPhone exhibits multiple behaviors ...
It exhibits behavior of a Camera: Click
It works like a Phone too: Ring Ring
*/
}
Go语言使用组合的方式实现继承,因此也可以很简单的实现多继承。
//使用组合的方式实现多继承
type Phone struct{}
func (p *Phone) Call() string {
return "Ring Ring"
}
type Camera struct{}
func (c *Camera) TakeAPicture() string {
return "Click"
}
//多继承
type CameraPhone struct {
Camera
Phone
}
func structTest0803() {
cp := new(CameraPhone)
fmt.Println("Our new CameraPhone exhibits multiple behaviors ...")
fmt.Println("It exhibits behavior of a Camera: ", cp.TakeAPicture())
fmt.Println("It works like a Phone too: ", cp.Call())
/*Output:
Our new CameraPhone exhibits multiple behaviors ...
It exhibits behavior of a Camera: Click
It works like a Phone too: Ring Ring
*/
}
相关文章推荐
- Go语言使用组合的方式实现多继承的方法
- Go语言以匿名组合的方式实现继承
- Go如何使用实现继承的组合
- Ext.get() 和 Ext.query() 组合使用 实现 最灵活的取元素方式
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- Go语言启动web服务的实现方式
- Go语言实现Fibonacci数列的两个算法(使用递归和不使用递归)
- 从继承方式的实现看javascript语言的设计初衷
- Go中的用组合实现继承
- Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
- 算法代码实现之归并排序,Golang(Go语言)实现,自顶向下与自底向上两种方式
- 外观模式-facade实现interface的方式(简单工厂+facade组合使用)
- 使用 ASM 实现 Java 语言的“多重继承”
- 使用 Go 语言实现优雅的服务器重启
- Ext.get() 和 Ext.query() 组合使用 实现 最灵活的取元素方式
- Liferay7.0使用 language key/value 方式实现多语言切换
- golang实战使用gin+xorm搭建go语言web框架restgo详解6.4 推荐编程方式
- Go语言中接口组合的实现方法
- 使用 ASM 实现 Java 语言的“多重继承”
- 使用混合方式实现javascript中对象的继承(推荐使用)