Cocos2d-Lua之面向对象的继承

来源:互联网 发布:java异步日志系统 编辑:程序博客网 时间:2024/05/19 01:12
--UsrClass.lua文件local Usr = class("Usr")--id,name,age分别为Usr.id = 1Usr.name = "张三"Usr.age = 20function Usr:ctor(name, num, age)    self.name = name    self.id = num    self.age = age    print("Usr中的构造")endfunction Usr:getinfo()    print("姓名: " .. self.name .. "    id:" .. self.id .. "    年龄:" .. self.age)endreturn 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中的构造函数")endreturn 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中的构造函数")endreturn Teacher

输出结果:

这里写图片描述

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

print(self.__cname)

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

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

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

这里写图片描述

可以看到打印出来Teacher,实际是由Teacher调用的。

0 0
原创粉丝点击