--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调用的。