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调用的。
相关文章推荐
- Cocos2d-Lua之面向对象的封装
- Cocos2d-Lua之闭包
- Cocos2d-Lua之协同程序
- TexturePacker 4.X 在Cocos2d-x 3.x 中帧动画实现(官方文档)
- 小水滴所理解的Cocos2dx内存管理机制
- Cocos2d-Lua之异常处理
- Cocos2d-Lua之文件操作
- Cocos2d-Lua之math库
- Cocos2d-Lua之随机数
- cocos2dx 渲染任意形状贴图
- 【Cocos2d-x游戏开发】解决Cocos2d-x中文乱码的三种方法
- windows cocos2d-x OpenGL error 0x0506 quick-cocos2d-x\lib\cocos2d-x\cocos2dx\sprite_nodes\ccsprite.c
- Cocos2d-Lua之string
- cocos2dx 3.8加载cocos studio csb文件
- cocos2D开发游戏
- Cocos2d-Lua之table的排序
- Cocos2d-Lua之Lua文件的加载与运行
- cocos2d-x面试题合集
- CocosPosd安装,错误
- Cocos2d-Lua之table的删除与插入