您的位置:首页 > 编程语言 > Lua

Lua学习笔记4:类及集成的实现

2017-03-02 17:26 363 查看
Lua学习笔记4:类及集成的实现
2014-07-12      0 个评论   
来源:程序员——在路上  
收藏    

我要投稿


-- 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() -- 调用新加的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐