Go是如何用组合实现继承的
来源:互联网 发布:网络技能大赛答案 编辑:程序博客网 时间:2024/05/16 19:14
Go提供了很赞的并发支持,但是Go并不支持完全的面向对象。这并不代表Go不支持面向对象,而且Go的OO系统做的非常轻量,学习成本压到了最小。尽管为了做到这种轻量级的面向对象让Go失去了一些OO的方便特性,但是更高的效率和多返回值多少弥补了这一点。
那些完全支持面向对象的语言一般都具有继承的功能。继承有很棒的优点,最简单了讲,就是可以少写代码。当然,继承并不仅仅是让你省了敲几下键盘的功夫,它还能更好的抽象程序中各种类型之间的关系。
Go的OO系统不支持继承,但是可以使用Go中一种叫做"组合"的方法来实现继承。下面演示两段程序,看过了之后你就会明白Go的这种组合技巧了。
C++中的继承:
#include <iostream>using namespace std;class Person {public: void Say();};void Person::Say() { cout << "I'm a person." << endl;}// 继承class Student : public Person {};int main() { Student s; s.Say(); return 0;}
等效的Go程序:
package maintype Person struct {}func (p *Person) Say() { println("I'm a person.")}// 组合type Student struct { Person}func main() { var s Student s.Say()}
这两个程序运行之后结果都是:
I'm a person.
可以看出Go可以通过组合另一个类型来"继承"它的所有行为,十分直观。不过C++和Go的这两段代码表达的意义其实还是有些略微的差别。C++的类继承表示Person是Student的一个父类,具有一种层次关系。但是Go的组合则表达了一种Student是个人,所以Student包含了Person的所有行为,即人能做的事情Student就能做,Student骨子里也是个人。
无论是继承还是组合,"复制"来的行为都是可以重写的~
希望这篇博文让你学会了Go的组合。
如果转载请注明出处:http://blog.csdn.net/gophers
0 0
- Go是如何用组合实现继承的
- 如何用Go实现单链表
- Go的组合继承
- Go语言使用组合的方式实现多继承
- Go语言以匿名组合的方式实现继承
- Go中的用组合实现继承
- 如何用Go实现一款类似滴滴优步的网络约车软件(含源码)
- Python--【研究】如何用python实现Markowitz投资组合优化
- 如何用C语言实现C++的基本特性:封装、继承、多态
- c++和java总异常是如何用c语言实现的
- 【多继承】PHP使用trait或者是组合的模式来实现多继承【原创】
- 如何用实现.NET的插件机制
- 如何用FPGA实现算法的硬件加速
- 如何用c实现可执行文件的复制
- 如何用JAVA实现文件的覆盖
- 如何用C实现C++的特性
- 如何用栈实现队列的功能
- 如何用ASP实现权限的设置?
- Exception收集
- 如何在没有安装MFC的机器上运行程序--更改VS设置为Use MFCin a static Library
- 怎么理解面向对象和面向过程到底的本质区别?
- 连减时,被减数为0时 错在哪
- Objective-C 和 Core Foundation 对象相互转换
- Go是如何用组合实现继承的
- C++第十天
- Photoshop cs5快捷键大全
- AFNetworking相关
- 字节序 Little-Endian和Big-Endian
- hdfs文件校验 hdfs fsck
- [Android]使用platform密钥来给apk文件签名的命令
- 手机管理应用研究【1】——总篇
- 如果提升PHP程序的性能