Lua学习笔记5:类及继承的实现

本文详细介绍了Lua中类的实现方式,包括构造函数、成员变量和成员方法的使用。并通过实例展示了类的继承机制,实现了多态性和代码复用。
-- 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() -- 调用新加的方法

转载于:https://www.cnblogs.com/bhlsheji/p/5238909.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值