Lua学习笔记5:类及继承的实现
2023-09-14 09:07:58 时间
-- Lua中类的实现
-------------------------------- 基类 ----------------------------
classBase = {x = 0,y = 0} -- x,y为类的成员变量
classBase.__index = classBase -- 这句是重定义元表的索引,必需要有
--模拟构造体,一般名称为new()
function classBase:new(x,y)
local self = {} -- 初始化对象自身
setmetatable(self, classBase) -- 必需要有
self.x = x
self.y = y
return self
end
function classBase:show() -- 类的成员函数
print(self.x,self.y)
end
-- 基类測试代码
objA = classBase:new(1,2) -- 调用构成函数创建类对象
objA:show() -- 调用类方法
print(objA.x,objA.y) -- 訪问类的成员变量
-- # lua提供了用冒号的方式在一个方法定义中加入一个额外的參数self,
-- # 这样调用bjA.show()会报错。self为nil
-- # print(objA:x,objA:y)错误的
-------------------------------- 继承:派生类 ----------------------------
classDerived = {z=0} -- 添加成员变量
setmetatable(classDerived, classBase) -- 设置类型为classBase
classDerived.__index = classDerived -- 和类定义一样,索引值表示自身
-- 构造函数
function classDerived:new(x,y,z)
local self = {}
self = classBase:new(x,y) --将对象自身设定为父类。相当于调用父类的构造函数
setmetatable(self, classDerived) -- 将对象自身元表设定为classDerived
self.z = z --新的属性初始化,假设没有将会依照声明=0
return self
end
-- 重写父类方法
function classDerived:show()
print(self.x, self.y, self.z)
end
-- 添加方法
function classDerived:showSum()
print(self.x + self.y + self.z)
end
-- 派生类測试代码
objB = classDerived:new(1,2,3) -- 调用构成函数创建类对象
objB:show() -- 调用重写的方法,体现了多态
objB:showSum() -- 调用新加的方法
-------------------------------- 基类 ----------------------------
classBase = {x = 0,y = 0} -- x,y为类的成员变量
classBase.__index = classBase -- 这句是重定义元表的索引,必需要有
--模拟构造体,一般名称为new()
function classBase:new(x,y)
local self = {} -- 初始化对象自身
setmetatable(self, classBase) -- 必需要有
self.x = x
self.y = y
return self
end
function classBase:show() -- 类的成员函数
print(self.x,self.y)
end
-- 基类測试代码
objA = classBase:new(1,2) -- 调用构成函数创建类对象
objA:show() -- 调用类方法
print(objA.x,objA.y) -- 訪问类的成员变量
-- # lua提供了用冒号的方式在一个方法定义中加入一个额外的參数self,
-- # 这样调用bjA.show()会报错。self为nil
-- # print(objA:x,objA:y)错误的
-------------------------------- 继承:派生类 ----------------------------
classDerived = {z=0} -- 添加成员变量
setmetatable(classDerived, classBase) -- 设置类型为classBase
classDerived.__index = classDerived -- 和类定义一样,索引值表示自身
-- 构造函数
function classDerived:new(x,y,z)
local self = {}
self = classBase:new(x,y) --将对象自身设定为父类。相当于调用父类的构造函数
setmetatable(self, classDerived) -- 将对象自身元表设定为classDerived
self.z = z --新的属性初始化,假设没有将会依照声明=0
return self
end
-- 重写父类方法
function classDerived:show()
print(self.x, self.y, self.z)
end
-- 添加方法
function classDerived:showSum()
print(self.x + self.y + self.z)
end
-- 派生类測试代码
objB = classDerived:new(1,2,3) -- 调用构成函数创建类对象
objB:show() -- 调用重写的方法,体现了多态
objB:showSum() -- 调用新加的方法
相关文章
- ProtoBuf 语法学习笔记
- css 课堂笔记
- 流媒体测试笔记记录之————解决问题video.js 播放m3u8格式的文件,根据官方的文档添加videojs-contrib-hls也不行的原因解决了
- 《从零开始学Swift》学习笔记(Day43)——构造函数继承
- 《从零开始学Swift》学习笔记(Day 41)——类的继承
- 深度学习Bible学习笔记:第一章 前言
- 机器学习笔记 - 翻译:如何成为一名数据科学家
- Javascript 学习 笔记四
- Javascript 学习 笔记五
- Angular @HostListener 装饰器的使用笔记
- uni-app 前后端实战课 - 《悦读》学习笔记:【创建用户数据表,完成app端用户登录功能】小程序开发实例教程5
- 【Spring笔记05】Spring的自动装配
- 区块链学习笔记:D02 区块链的技术发展历史和趋势
- Qt笔记-当前时间转GMT并转换成英文(Qt构造http头中Date数据)
- Swift学习笔记十三:继承
- java学习记录笔记--继承,super,Object类
- C++ Primer 学习笔记_95_用于大型程序的工具 --多重继承与虚继承
- linux达人养成计划学习笔记(八)—— shell基础
- git学习笔记(四)—— 分支管理
- 信号完整性(SI)电源完整性(PI)学习笔记(三十)电源分配网路(二)
- 7、笔记-创建对象的内存分析
- Python学习笔记九之Opencv图像基本操作
- Docker学习笔记13:docker使用之Compose
- java学习笔记——继承的综合案例
- java学习笔记——继承
- 学习笔记(05):Python爬虫开发-数据解析