区块链技术语言(二十四)——Go语言面向对象:匿名组合

继承也是面向对象的三大基本特性之一。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。通过继承,不仅可以让某个类型的对象拥有属于自己的数据结构和操作,还会自动拥有父类的数据结构和操作。这使得现有的类在无需重新编写原来类的情况下对这些功能进行了扩展,很好地解决了代码的重用问题。继承机制的魅力和强大在于它允许程序员利用已经存在的类,并且可以以某种方式扩展这个类,而且对其他继承了这个父类属性和方法的对象没有影响。但Go语言没有继承这个概念,它通过匿名组合间接实现了继承的特性。

一、匿名组合实现的属性继承

1.1 匿名字段

在结构体那一章节介绍过Go语言的匿名字段:即只有类型、没有字段名的字段。虽然匿名字段没有名称,但本质上是以类型名为名称的字段。所有内置类型和自定义类型都可以作为匿名字段。

1.2 匿名字段构成的匿名组合

如果结构体中的匿名字段是结构体类型,那么这个结构体所拥有的全部字段都被隐式地引入了当前定义的这个结构体。这种结构体内部嵌套结构体匿名字段的组合被称作匿名组合。而结构体匿名字段中的成员可以通过外部结构体直接访问。

1.3 同名字段构成的匿名组合

外部结构体的成员变量名和嵌入的结构体匿名字段中的成员变量名相同,则此外部结构体成员被称作同名字段。同名字段可以通过外部结构体直接访问,但是匿名字段中与同名字段同名的成员变量的访问需要显式调用,其他成员变量可以通过外部结构体直接访问。

1.4 匿名组合和非匿名组合的区别

和匿名组合相比,非匿名组合有两点不同:
第一,内部的嵌入字段是有变量名的,调用该字段的内部成员需要显式调用;
第二,嵌入字段所拥有的全部字段并没有被隐式地引入当前定义的这个结构体,也就是没有实现继承。

1.5 其他匿名字段

匿名字段不仅可以是结构体类型,还可以是其他任意的内置类型和自定义类型,甚至可以是结构体的指针类型。

1.5.1 非结构体类型

非结构体类型包括:所有的内置类型和自定义类型。

1.5.2 结构体指针类型

匿名字段不仅可以是结构体类型,也可以是结构体指针类型。

二、匿名组合的方法继承与重写

2.1 方法的继承

如果嵌套在结构体内部的匿名字段已经实现了一个方法,那么外部结构体就“继承”了这个方法。外部结构体也可以实现其他方法。

2.2 方法的重写

如果嵌套在结构体内部的是匿名字段,内部结构体实现了方法。外部结构体对此方法进行了修改,这就叫做方法的重写。可以通过外部结构体直接访问重写后的方法,但是匿名字段的方法需要显式调用。

参考资料
[1] 谭浩强.C++面向对象程序设计[M]. 清华大学出版社,2006
[2] 陈维兴,陈昕.C++面向对象程序设计[M]. 人民邮电出版社,2010

原文地址:https://www.cnblogs.com/efish/p/go-language-Object-Oriented-anonymous.html

时间: 2024-10-08 06:33:23

区块链技术语言(二十四)——Go语言面向对象:匿名组合的相关文章

第10讲 | 深入区块链技术(二):P2P网络

在上一篇文章中,我大致讲解了一下区块链技术的几个核心要素.P2P网络协议.分布式一致性算法(共识机制).加密签名算法.账户与存储模型.今天我们就来看看区块链技术的第一个核心要素:P2P网络. 如果我们简单来看P2P技术,它的应用领域已经非常广泛了,从流媒体到点对点通讯.从文件共享到协同处理,多种领域都有它的身影出现. 同样的,P2P的网络协议也有很多,比较常见的有BitTorrent.ED2K.Gnutella.Tor等,也就是我们常说的BT工具和电驴. 比特币.以太坊等众多数字货币都实现了属于

JavaSE 学习笔记之反射技术(二十四)

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员.简单说:反射技术可以对一个类进行解剖. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1.获得Class对象,就是获取到指定的名称的字节码文件对象. 2.实例化对象,获得类的属性.方法或构造函数. 3.访问属性.调用方法.调用构造函数创建对象. 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取.

大数据笔记(二十四)——Scala面向对象编程实例

===================== Scala语言的面向对象编程 ======================== 一.面向对象的基本概念:把数据和操作数据的方法放到一起,作为一个整体(类 class) 面向对象的特征: (1)封装 (2)继承 (3)多态 二.定义类: class,没有类的修饰符: public.protected.private class Student1 { //定义属性 private var stuName:String = "Tom" privat

区块链技术的基本特点

区块链技术近期大热. 作为比特币和其他虚拟货币底层核心技术,区块链是一种开放的分布式分类帐本,可以有效地以可验证和永久的方式记录双方之间的交易信息,而分类帐本身也可以被编程以自动触发交易.小编带您简单了解一下区块链技术的五个原则. 区块链开发 155--0116--2665 区块链技术的五个基本特点如下: 区块链技术特点一:分布式数据库 区块链上的每一方都可以访问整个数据库及其完整的历史记录. 没有单一方控制数据或信息. 每一方都可以直接验证其交易合作伙伴的记录,而无需中间人. 区块链技术特点二

主流区块链技术特点及Fabric V0.6&V1.0版本特点

声明:文章内容来源于网络. 一.主流区块链技术特点 二.Hyperledger的fabric V0.6总体架构: 对应的0.6版本的运行时架构: 0.6版本的架构特点是: 结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点:    架构问题:由于peer节点承担了太多的功能,所以带来扩展性.可维护性.安全性.业务隔离等方面的诸多问题,所以0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例中进行业务验证: 三.Hyperledger的fabric V

区块链扫盲:区块链技术初探(二)

?5. 共识机制 区块链是一种去中心化的分布式账本系统,由于点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序不可能完全一致.因此区块链系统需要设计一种机制对在差不多时间内发生的事务的先后顺序进行共识.这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为"共识机制". 5.1区块链和分布式系统容错的相同点 (1) Append only. (2) 强调序列化(时间有序). (3) 少数服从多数原则. (4) 分离覆盖的问题:即长链覆盖短链区块,多节点覆盖少数节点. 5.

二十四进制编码串转换为32位无符号整数(C语言实现)

typedef int BOOL; #define TRUE 1; #define FALSE 0; #define UINT_MAX 0xffffffff /* maximum unsigned int value */ enum Scale24AsciiVal { sav_aADis = 32, // 小写字母与大写字母ASCII码差值 sav_chIntDis = 48, // 字符'0'ASCII码值 }; static const char scale24[24] = {'0', '1

区块链快速入门(五)——区块链技术的演化

区块链快速入门(五)--区块链技术的演化 一.区块链技术的发展 比特币区块链面向转账场景,支持简单的脚本计算.如果引入更多复杂的计算逻辑,将能支持更多应用场景,即智能合约(Smart Contract).智能合约可以提供除了货币交易功能外更灵活的合约功能,执行更为复杂的操作.引入智能合约的区块链,已经超越了单纯数据记录功能:可以为区块链加入权限管理,高级编程语言支持等,实现更强大的.支持更多商用场景的分布式账本系统.区块链技术的三种典型演化场景如下: 二.区块链技术的分类 根据参与者的不同,区块

如何从零开始学习区块链技术——推荐从以太坊开发DApp开始

很多人迷惑于区块链和以太坊,不知如何学习,本文简单说了一下学习的一些方法和资源. 一. 以太坊和区块链的关系 从区块链历史上来说,先诞生了比特币,当时并没有区块链这个技术和名词,然后业界从比特币中提取了技术架构和体系,称之为区块链技术.从比特币提取的区块链技术称之为区块链1.0时代,那个时候的应用主要以电子货币和去中心化交易为主,比如各种山寨币.而以太坊将区块链带入了2.0的时代,区块链2.0不是推翻了1.0,而是在1.0的基础上实现了区块知晓.价值知晓.图灵完备,并进行了细节优化,从而形成了以

区块链技术的比较

原文地址:https://blog.csdn.net/diannao720/article/details/53835721 开源: 名称 公识算法 适合场景 开发语言 智能合约 TPS 比特币1.0 POW 公链 C++ 否 7 以太坊ETH 1.0 POW 公链/联盟链 GO 是 25 IBM HyperLedger fabric PBFT为主 联盟链 GO 是 100K 比特股BitShare DPos 联盟链 C++ 否 500 公证通Factom Factom自有共识机制,类Pos 公