Lua中的面向对象是通过表(table)来模拟类实现的,通过setmetatable(table,metatable)方法,将一个表设置为当前表的元表,之后在调用当前表没有的方法或者键时,会再查询元表中的方法和键,以此来实现面向对象。
至于元表和元方法的使用可以看我的这篇文章:
Lua元表和元方法的使用-CSDN博客
一个例子来说明实现:
有一家三口,爸爸是工程师,妈妈是老师,孩子是学生,都会跑步,但是他们从事不同的工作。
实现封装:
local people = {}
function people:new ()
local t = {}
setmetatable(t,self);
self.__index = self;
return t
end
function people:talk()
print("I'm a person")
end
function people:running()
print("I can run")
end
实现继承:
local engineer = people:new();
local teacher = people:new();
local student = people:new();
engineer.running();
teacher.running();
student.running();
输出:
实现多态:
local engineer = people:new();
function engineer:talk()
print("I'm an engineer")
end
local teacher = people:new();
function teacher:talk()
print("I am a teacher")
end
local student = people:new();
function student:talk()
print("I am a student")
end
engineer.talk();
teacher.talk();
student.talk();
输出:
参考书籍与链接:
《Lua程序设计》
《Cocos2d-x游戏开发:手把手教你Lua语言的编程方法》
掌握 Lua 脚本语言 (pikuma.com)
Creating A Toggle Switch In Wix Studio (youtube.com)