Lua 之 面向对象 -- 继承

时间:2023-01-02 09:36:20

面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。
Lua的也是一种面向对象的语言,我们常见的面向对象的编程语言有:

C++
Java
Objective-C
Smalltalk
C#
Ruby
面向对象具有三大特征:封装、继承、多态
对象由属性和方法组成。LUA中最基本的结构是table,所以需要用table来描述对象的属性。

lua中的function可以用来表示方法。那么LUA中的类可以通过table + function模拟出来。
至于继承,可以通过metetable模拟出来(不推荐用,只模拟最基本的对象大部分时间够用了)

-- 继承
Shape = {area = 0}
-- 基础类方法 new
function Shape:new (o,side)
o = o or {}
setmetatable(o, self)
self.__index = self
side = side or 0
self.area = side*side;
return o
end
-- 基础类方法 printArea
function Shape:printArea ()
print("面积为 ",self.area)
end

--Square 继承自Shape
Square = Shape:new()
-- Shape自己的构造方法
function Square:new (o,side)
o = o or Shape:new(o,side)
setmetatable(o, self)
self.__index = self
return o
end
--Rectangle 继承自Shape
Rectangle = Shape:new()
-- Rectangle 自己的构造方法
function Rectangle:new (o,length,breadth)
o = o or Shape:new(o,side)
setmetatable(o, self)
self.__index = self
self.length = length or 0
self.breadth = breadth or 0
self.area = length*breadth;
return o
end
myRectangle = Rectangle:new(nil,20,30)
myRectangle:printArea()