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中面向对象编程的基本知识点和示例,希望能对你有所帮助。