lua模拟类的继承

转载的文章,COCOS2D-X LUA面向对象编程里面,数据是初始化了之后传入类中,类负责提供一些计算的方法,而一些类,可能是有固定的数据格式,在创建类的时候不用传入数据,只是向外提供修改这些数据的接口,和一些数据计算方法,而且子类在继承了父类的数据之后,自己可能还要有些独有的数据需要初始化,那么可以考虑把每个类的数据的初始化单独拿出来处理,这样数据的初始化就不用通过类外面生成表,再传参实现,而是有一种良好的结构了。代码如下:

Base = {}
function Base:New()
	local o = {}
	setmetatable(o,self)
	self.__index = self
	o:Init()-->"Base:Init()"
	return o
end
function Base:Init()
	self.mX = 0
	self.mY = {y=1}
	print("Base:Init()")
end
function Base:SetX(x)
	self.mX = x
end
function Base:GetX()
	return self.mX
end
function Base:SetY(y)
	self.mY.y = y
end
function Base:GetY()
	return self.mY.y
end

Child = Base:New()--> Base:Init()
function Child:New()
	local o = {}
	setmetatable(o,self)
	self.__index = self
	o:Init()
	return o
end
function Child:Init()
	local parent = getmetatable(Child)
	parent.__index.Init(self)--对元表元方法不是特别理解的同学,可以看我转载的文章 COCOS2D-X LUA 面向对象编程
	self.mW = 100
	print("Child:Init()")
end
function Child:SetW(w)
	self.mW = w
end
function Child:GetW()
	return self.mW
end

function main()
	local wu = Child:New()-->Base:Init() Child:Init()
	wu:SetW(200)
	print(wu:GetW())-->200
	wu:SetX(44)
	print(wu:GetX())-->44
end
main()

都带有简单的注释,简单的两个类,把数据初始化分离开来,在子类生成的时候,也从父类继承数据下来,如果要修改,提供接口出来就行。

输出结果是:

>lua -e "io.stdout:setvbuf 'no'" "class.lua" 
Base:Init()
Base:Init()
Child:Init()
200
44
>Exit code: 0



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值