- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Lua面向对象之多重继承、私密性详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在Lua中的多重继承和私密性可能用得比较少,也可能只是我个人用得比较少。 本来想偷懒不写这文章的,因为我今天刚买了个漂移板,连起步都还没学会啊,想多学一会.
咳咳,本着坚持不懈、负责到底的态度,我还是决定随便写几句~(小若:随便写几句是几吨意思啊?!) 。
1.多重继承之在多个类中查找一个字段 。
我发现这些高(shen)智(jing)商(bing)人群真的很厉害,这种技巧都能想到,很佩服。 其实多重继承没什么特别的,除非两个将要被继承的类有相同的函数名和属性,否则,处理起来很简单。 无非就是在多个table中查找某个字段而已,不简单吗?Lua里的继承就是在别人的table里查找自己不存在的字段罢了.
那么,单继承与多重继承的差别也在这里,一个是只查找一个table,另一个是查找两个或以上的table.
我们就先来看看如何从2个或多个table中查找某个字段,如下代码:
。
这里的classes参数,是一个table,这个table里又存放了多个table,也就是我们想要继承的那些类.
而key就是要查找的字段.
只需要遍历所有的table,判断这个字段是否在某个table里,找到之后,就返回这个值。 我们的测试代码就是从t1、t2中查找game这个字段,t1、t1可以看成是两个类。 输出结果如下:
。
2.多重继承之创建继承多个类的子类 。
刚刚的search函数很简单吧?别急着开心,那只是预热一下而已,真正创建多重继承的函数比较复杂.
如下代码:
。
createClass函数就是用来创建一个继承了多个类的子类,有点小复杂,慢慢分析:
1) 参数是一个可变参数,我们要将多个被继承的类作为参数传递进来 2) parents用于保存这些被继承的类 3) 创建一个新的table——child,它就是我们想要的那个继承了多个类的子类 4) 给child设置元表,并且设置__index元方法,__index元方法可以是一个函数,当它是一个函数时,它的参数就是元表所属的table,以及要查找的字段名。 5) 我们在__index元方法函数里调用search函数,从多个父类中查找所需的字段。于是,当调用child的某个函数时,就会从各个父类中查找,这已经完成了继承的工作了。 6) 接下来就是我们所熟悉的new函数,用来创建child的子类,实现方式和上一篇所说的是一样 ,如果你忘记了,可以看看这篇文章://www.zzvips.com/article/55168.htm 7) 最后返回child,一切都完成了.
看似很复杂,其实还是对__index的应用而已.
我们赶紧来测试一下吧,如下代码:
。
这里创建了两个类:TSprite和TBullet。 然后调用createClass函数,创建一个继承了TSprite和TBullet的子类。 最后创建子类的对象,调用对象的hello和fire函数。 输出结果如下:
怎么样?很简单吧~ 。
。
3.类的私密性 。
这里来说一个和多重继承无关的技巧,那就是私密性.
对于Java、C++等语言,我们都很熟悉,public、private、protected等关键词。 这些关键词让封装成为了可能。 然后,Lua里是没有私密这种说法的,类也是一个table,table的所有字段都是可以调用的,并没有说哪些是公有的,哪些是私有的.
如果有某些函数和属性不希望被外部调用,那么,也可以,不过这种实现方式看起来很别扭:
。
我们已经不需要用到冒号来定义函数了,这个类的name、myBus、myGame都是不希望给外部直接调用的.
调用createTSprite函数后,会返回一个新的table,这个table仅仅存放了一些字段,这些字段就是能够被外部直接调用的函数或者是属性.
来看看测试代码:
。
输出结果如下:
这样,我们创建的对象就只能使用hello、hi、setName函数.
。
而其他的name、myBus、myGame只能通过这几个能使用的函数去调用,而不能直接调用。 这样就能完成私密性了。 不过,我个人有点迷糊,因为这已经不太像一个类的样子了.
4.结束 。
好了,关于面向对象的内容,暂时介绍到这里。 可能介绍的都比较基础,目的是为了巩固Lua基础.
最后此篇关于Lua面向对象之多重继承、私密性详解的文章就讲到这里了,如果你想了解更多关于Lua面向对象之多重继承、私密性详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
大家好,我是汤师爷~ 什么是订单履约系统? 订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费
大家好,我是汤师爷~ 今天聊聊促销系统整体规划。 各类促销活动的系统流程,可以抽象为3大阶段: B端促销活动管理:商家运营人员在后台系统中配置和管理促销活动,包括设定活动基本信息、使用规则
全称“Java Virtual Machine statistics monitoring tool”(statistics 统计;monitoring 监控;tool 工具) 用于监控虚拟机的各种运
主要是讲下Mongodb的索引的查看、创建、删除、类型说明,还有就是Explain执行计划的解释说明。 可以转载,但请注明出处。  
1>单线程或者单进程 相当于短链接,当accept之后,就开始数据的接收和数据的发送,不接受新的连接,即一个server,一个client 不存在并发。 2>循环服务器和并发服务器
详解 linux中的关机和重启命令 一 shutdown命令 shutdown [选项] 时间 选项: ?
首先,将json串转为一个JObject对象: ? 1
matplotlib官网 matplotlib库默认英文字体 添加黑体(‘SimHei')为绘图字体 代码: plt.rcParams['font.sans-serif']=['SimHei'
在并发编程中,synchronized关键字是常出现的角色。之前我们都称呼synchronized关键字为重量锁,但是在jdk1.6中对synchronized进行了优化,引入了偏向锁、轻量锁。本篇
一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象。  
实例如下: ? 1
1. MemoryCahe NetCore中的缓存和System.Runtime.Caching很相似,但是在功能上做了增强,缓存的key支持object类型;提供了泛型支持;可以读缓存和单个缓存
argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 复制代码 代码如下: <script
一不小心装了一个Redis服务,开了一个全网的默认端口,一开始以为这台服务器没有公网ip,结果发现之后悔之莫及啊 某天发现cpu load高的出奇,发现一个minerd进程 占了大量cpu,googl
今天写这个是为了 提醒自己 编程过程 不仅要有逻辑 思想 还有要规范 代码 这样可读性 1、PHP 编程规范与编码习惯最主要的有以下几点: 1 文件说明 2 funct
摘要:虚拟机安装时一般都采用最小化安装,默认没有lspci工具。一台测试虚拟网卡性能的虚拟机,需要lspci工具来查看网卡的类型。本文描述了在一个虚拟机中安装lspci工具的具体步骤。 由于要测试
1、修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统
目录 算术运算符 基本四则运算符 增量赋值运算符 自增/自减运算符 关系运算符 逻
如下所示: ? 1
MapperScannerConfigurer之sqlSessionFactory注入方式讲解 首先,Mybatis中的有一段配置非常方便,省去我们去写DaoImpl(Dao层实现类)的时间,这个
我是一名优秀的程序员,十分优秀!