golang 走起(七) 多态
2016-04-15 18:22
453 查看
golang 走起(七) 多态
代码:package main import ( "log" ) type IMessage interface { ChangAge (b []byte) bool // 接口1 RegisterSendMsg (s1 func(s string, m []byte) (err error)) // 接口2,用于注册,可以使用其他简单办法,这样写停停停2的 } type Msg struct { m IMessage // 接口引用引用引用,终于的事情说3遍 OpenMessage func(k int) IMessage // 创建接口IMessage的函数指针 } func OpenMessage1(k int) IMessage { var im IMessage im = &AAA{age:k} return im } func SendMsg(s string, m []byte) (err error) { log.Println("s:", s) log.Println("m:", string(m)) return nil } // 类似C++,IMessage的子类 type AAA struct { age int sh func(s string, m []byte) (err error) } func (c *AAA)ChangAge (b []byte) bool { a := c a.age = 12222 log.Println("b:", string(b)) a.sh("wawa", []byte("cytcytcyt")) return true } func (c *AAA)RegisterSendMsg(s1 func(s string, m []byte) (err error)) { c.sh = s1 } func test() { msg := Msg{} msg.OpenMessage = OpenMessage1 msg.m = msg.OpenMessage(100) msg.m.RegisterSendMsg(SendMsg) msg.m.ChangAge([]byte("haha")) log.Println("a.age:", msg.m.(*AAA).age) // 获取*AAA的age,这里一定要使用指针,可能是IMessage是引用造成,当然可能不对,请告知 a := msg.m.(*AAA) a.age = 1 log.Println("a.age:", msg.m.(*AAA).age) } func main() { test() }
结果:
2016/03/04 14:45:32 b: haha
2016/03/04 14:45:32 s: wawa
2016/03/04 14:45:32 m: cytcytcyt
2016/03/04 14:45:32 a.age: 12222
golang是没有继承和多态的,只有interface和组合的哲学,请查看注释
相关文章推荐
- Go 语言 Channel 实现原理精要
- Go语言将支持Android
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- C#中的多态深入理解
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C# 面向对象三大特性:封装、继承、多态
- javascript每日必学之多态
- c#基础学习之多态
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- 从汇编看c++中多态的应用
- Golang实现的聊天程序服务端和客户端代码分享
- javascript 面向对象全新理练之继承与多态
- Java多态的使用注意事项
- C#使用虚拟方法实现多态
- 实例讲解PHP面向对象之多态
- C#中多态现象和多态的实现方法
- C++基础之this指针与另一种“多态”
- 深入解析C++中的虚函数与多态