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

it2025-05-30  4

-- 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

相关资源:数据结构—成绩单生成器
最新回复(0)