Lua 面向对象学习笔记
Lua是一种轻量级的脚本语言,提供了面向对象编程的支持。在这份学习笔记中,我们将介绍Lua的面向对象编程特性,包括如何定义和使用类、对象、继承和多态等。
类和对象
在Lua中,可以使用table来实现类和对象的概念。一个table可以作为一个类来定义,它包含构造函数和一组成员函数。一个table也可以作为该类的一个对象实例,其中成员变量和成员函数可以通过"."来访问。
以下是一个简单的示例代码:
luaCopy Code-- 定义一个类
Person = {
name = nil,
age = nil,
}
-- 构造函数
function Person:new(name, age)
local obj = {name = name, age = age}
setmetatable(obj, self)
self.__index = self
return obj
end
-- 成员函数
function Person:sayHello()
print("Hello, my name is " .. self.name .. ", and I am " .. self.age .. " years old.")
end
-- 创建一个对象
p1 = Person:new("Tom", 18)
p1:sayHello() -- 输出: Hello, my name is Tom, and I am 18 years old.
继承
在Lua中,可以通过简单的table复制和元表技术来实现继承。下面是一个继承示例代码:
luaCopy Code-- 定义一个基类
Animal = {
name = nil,
}
function Animal:new(name)
local obj = {name = name}
setmetatable(obj, self)
self.__index = self
return obj
end
function Animal:sayHello()
print("I am an animal, my name is " .. self.name)
end
-- 定义一个派生类
Dog = Animal:new()
function Dog:new(name)
local obj = Animal:new(name)
setmetatable(obj, self)
self.__index = self
return obj
end
function Dog:sayHello()
print("I am a dog, my name is " .. self.name)
end
-- 创建一个Dog对象
d1 = Dog:new("小白")
d1:sayHello() -- 输出: I am a dog, my name is 小白
多态
在Lua中,实现多态可以使用元表技术。下面是一个多态示例代码:
luaCopy Code-- 定义一个基类
Shape = {
}
function Shape:new()
local obj = {}
setmetatable(obj, self)
self.__index = self
return obj
end
function Shape:getType()
print("I am a shape.")
end
-- 定义一个派生类
Circle = Shape:new()
function Circle:new()
local obj = Shape:new()
setmetatable(obj, self)
self.__index = self
return obj
end
function Circle:getType()
print("I am a circle.")
end
-- 定义另一个派生类
Rectangle = Shape:new()
function Rectangle:new()
local obj = Shape:new()
setmetatable(obj, self)
self.__index = self
return obj
end
function Rectangle:getType()
print("I am a rectangle.")
end
-- 使用多态
shapes = {Shape:new(), Circle:new(), Rectangle:new()}
for i, shape in ipairs(shapes) do
shape:getType()
end
以上就是Lua中面向对象编程的基本知识点和示例,希望能对你有所帮助。