Go语言使用组合的方式实现多继承的方法
本文实例讲述了Go语言使用组合的方式实现多继承的方法。分享给大家供大家参考。具体实现方法如下:
在大多数面向对象的编程语言中多继承都是不支持的。因为在基于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语言程序设计有所帮助。
相关推荐
-
go语言睡眠排序算法实例分析
本文实例讲述了go语言睡眠排序算法.分享给大家供大家参考.具体分析如下: 睡眠排序算法是一个天才程序员发明的,想法很简单,就是针对数组里的不同的数开多个线程,每个线程根据数的大小睡眠,自然睡的时间越长的,数越大,哈哈,搞笑吧,这种算法看起来很荒唐,但实际上很天才,它可以充分利用多核cpu进行计算. 复制代码 代码如下: package main import ( "fmt" "time" ) func main() { tab := []in
-
深入解析快速排序算法的原理及其Go语言版实现
快速排序是一种基于分治技术的重要排序算法.不像归并排序是按照元素在数组中的位置对它们进行划分,快速排序按照元素的值对它们进行划分.具体来说,它对给定数组中的元素进行重新排列,以得到一个快速排序的分区.在一个分区中,所有在s下标之前的元素都小于等于A[s],所有在s下标之后的元素都大于等于A[s]. 显然,建立了一个分区以后,A[s]已经位于它在有序数组中的最终位置,接下来我们可以继续对A[s]前和A[s]后的子数组分别进行排序(使用同样的方法). 为了排序一个数组A的全部元素,初始调用的是QUI
-
Golang正整数指定规则排序算法问题分析
本文实例讲述了Golang正整数指定规则排序算法问题.分享给大家供大家参考,具体如下: 给定字符串内有很多正整数,要求对这些正整数进行排序,然后返回排序后指定位置的正整数 排序要求:按照每个正整数的后三位数字组成的整数进行从小到大排序 1)如果不足三位,则按照实际位数组成的整数进行比较 2)如果相等,则按照输入字符串中的原始顺序排序 说明(以下内容考生无须检查,调用者保证): 1) 字符串内正整数之间以单个空格分隔,字符串首尾没有空格 2) 正整数格式为十进制,大小:1~1000000,正整数的
-
Go语言实现AzDG可逆加密算法实例
本文实例讲述了Go语言实现AzDG可逆加密算法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "fmt" "crypto/md5" "encoding/base64" "time" ) var cipher = "密鑰" var h = md5.New() func cipherEncode(sourceText string) stri
-
Go语言展现快速排序算法全过程的思路及代码示例
快速排序算法 快速排序是一个递归的思想,首先选择一个数作为基数,把数组中小于它的数放在它的左边,把大于它的数放在它的右边,然后对左右两边的数递归进行排序. 算法的关键部分是实现数组的划分,即怎么把数组的元素划分成两部分,使得左边的数比基数小,右边的数比基数大.划分有许多不同的实现方法,这里主要使用单向扫描的方法,后面再稍微介绍双向扫描的方法. 选择最右边的数字作为基数.使用一个变量j记录当前左边数字(比基数小的数)的最右的下标值.然后使用变量i从左到右遍历数组,如果a[i]比基数小,说明a[i]
-
Golang排列组合算法问题之全排列实现方法
本文实例讲述了Golang排列组合算法问题之全排列实现方法.分享给大家供大家参考,具体如下: [排列组合问题] 一共N辆火车(0<N<10),每辆火车以数字1-9编号,要求以字典序排序输出火车出站的序列号. 输入: 包括N个正整数(0<N<10),范围为1到9,数字之间用空格分割,字符串首位不包含空格. 输出: 输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行. 样例输入: 1 2 3 样例输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3
-
Go语言算法之寻找数组第二大元素的方法
本文实例讲述了Go语言算法之寻找数组第二大元素的方法.分享给大家供大家参考.具体如下: 该算法的原理是,在遍历数组的时,始终记录当前最大的元素和第二大的元素.示例代码如下: 复制代码 代码如下: package demo01 import ( "fmt" ) func NumberTestBase() { fmt.Println("This is NumberTestBase") nums := []int{12, 2
-
Go语言实现汉诺塔算法
hano.go package main import ( "bufio" "fmt" "os" "strconv" ) func main() { fmt.Print("输入要移动的盘子数:") reader := bufio.NewReader(os.Stdin) lool: data, _, _ := reader.ReadLine() n, err := strconv.Atoi(string(da
-
GO语言利用K近邻算法实现小说鉴黄
Usuage: go run kNN.go --file="data.txt" 关键是向量点的选择和阈值的判定 样本数据来自国家新闻出版总署发布通知公布的<40部淫秽色情网络小说名单> package main import ( "bufio" "flag" "fmt" "io" "log" "math" "os" "pa
-
Golang最大递减数算法问题分析
本文实例讲述了Golang最大递减数算法问题.分享给大家供大家参考,具体如下: 给出一个非负整数,找到这个非负整数中包含的最大递减数.一个数字的递减数是指相邻的数位从大到小排列的数字. 如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953. 如果输入的数字为负数,返回-1. 如果找不到递减数,也返回-1. 代码实现: 复制代码 代码如下: package huawei import ( "fmt" "sort&q
-
Go语言通过Luhn算法验证信用卡卡号是否有效的方法
本文实例讲述了Go语言通过Luhn算法验证信用卡卡号是否有效的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import ( "fmt" "strings" ) const input = `49927398716 49927398717 1234567812345678 1234567812345670` var t = [...]int{0, 2, 4, 6, 8, 1, 3, 5, 7, 9}
-
Go语言实现的树形结构数据比较算法实例
本文实例讲述了Go语言实现的树形结构数据比较算法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: // Two binary trees may be of different shapes, // but have the same contents. For example: // // 4 6 // 2 6 4 7 // 1 3 5 7 2 5 //
随机推荐
- 使用json来定义函数,在里面可以定义多个函数的实现方法
- extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
- oracle iSQL*PLUS配置设置图文说明
- JavaScript在for循环中绑定事件解决事件参数不同的情况
- PHP mb_convert_encoding 获取字符串编码类型实现代码
- python模拟登陆阿里妈妈生成商品推广链接
- Vue.js自定义指令的用法与实例解析
- 测试你对技术的掌握度:JSP程序员成长之路
- C#小数点格式化用法小结
- js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
- 应用软件的通用注册表修改实例
- 关于CentOS 7下sqlite3找不到的问题解决
- 详解把Node.js项目部署到阿里云服务器(CentOs)
- Java的基础语法学习笔记
- Android编程之阴影(Shadow)制作方法
- 从交换机原理看网络广播风暴的几种原因
- 详解layui弹窗父子窗口之间传参数的方法
- nodejs 最新版安装npm 的使用详解
- 微信小程序五子棋游戏AI实现方法【附demo源码下载】
- 使用spring的IOC解决程序耦合的方法