多态的理解与应用
package main
type Phone interface{
Call()
}
type Nokia struct{}
func (n *Nokia)Call(){
fmt.Println("Nokia,Connecting people")
}
type Apple struct{}
func (n *Apple)Call(){
fmt.Println("Apple,Switch")
}
// PhoneCall 框架层
func PhoneCall(p Phone){
p.call()
}
func main(){
var p Phone
p = &Nokia{}
p.Call()
p = &Apple{}
p.Call()
/* 通过多态实现对未来发展的兼容,在不改变框架的基础上,可以增加手机类型,而使得相关方法eg(框架层的方法PhoneCall)的调用不受影响。
而在JAVA中,可以通过对象向上转型(多态的应用),使用父对象来存储子对象并调用子对象覆写的方法使得代码在不改变原有架构的情况下实现对未来一段时间的兼容扩展。
在设计上,java采取对象的转型,而go通过非侵入式的隐式接口实现。
实现关键:针对抽象层进行设计
*/
PhoneCall(&Hw{})
}