您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-Lua之面向对象的继承

2016-06-18 10:36 417 查看
--UsrClass.lua文件
local Usr = class("Usr")
--id,name,age分别为
Usr.id = 1
Usr.name = "张三"
Usr.age = 20

function Usr:ctor(name, num, age)
self.name = name
self.id = num
self.age = age
print("Usr中的构造")
end

function Usr:getinfo()
print("姓名: " .. self.name .. "    id:" .. self.id .. "    年龄:" .. self.age)
end

return Usr


--Teacher.lua文件
local User = require("app.scenes.UsrClass")

local Teacher = class("Teacher", User)  --Teacher继承了User类

return Teacher


--test.lua文件
local teacherclass = require("app.scenes.Teacher")
local t1 = teacherclass.new("洪七公", 201, 50)
t1:getinfo()


输出结果:



teacher继承了usr中的所有成员变量和成员函数,这跟C++中的继承是一样的,只不过不存在访问权限的问题。

--Teacher.lua文件
local User = require("app.scenes.UsrClass")

local Teacher = class("Teacher", User)
function Teacher:ctor(name, id, age)
self.name = name
self.id = id
self.age = age
print("Teacher中的构造函数")
end

return Teacher


这里写入Teacher类的构造函数,再运行一下:



发现这里运行的就是Teacher类中的构造函数,父类Usr中的构造函数完全被覆盖了,如果也想运行父类Usr中的构造函数,改成这样:

--Teacher.lua文件
local User = require("app.scenes.UsrClass")

local Teacher = class("Teacher", User)
function Teacher:ctor(name, id, age)
self.super:ctor(name, id, age)
print("Teacher中的构造函数")
end

return Teacher


输出结果:



这样就可以把子类父类的构造函数都调用了。

print(self.__cname)


利用这句可以看到到底是哪个类调用的:

--Usr类
function Usr:getinfo()
print(self.__cname)
print("姓名: " .. self.name .. "    id:" .. self.id .. "    年龄:" .. self.age)
end


在Usr类的getinfo函数中,加入这句,运行结果:



可以看到打印出来Teacher,实际是由Teacher调用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: