继承是指创建一个新的类(称为子类),从一个已有的类(称为父类或基类)继承属性和方法。子类可以继承父类的属性和方法,并且可以添加新的属性和方法,或者覆盖父类的属性和方法以实现自己的特定行为。在Lua中,继承通常通过元表(metatable)来实现。
以下是一个简单的示例,展示了如何在Lua中实现继承:
luaCopy Code-- 定义父类
local Shape = {
name = "Shape",
}
function Shape:new()
local obj = { }
setmetatable(obj, self)
self.__index = self
return obj
end
function Shape:draw()
print("Drawing a " .. self.name)
end
-- 定义子类
local Circle = Shape:new()
Circle.name = "Circle"
function Circle:draw()
print("Drawing a " .. self.name)
end
-- 创建对象并调用方法
local myCircle = Circle:new()
myCircle:draw() -- 输出 "Drawing a Circle"
多态是指同一种操作作用于不同的对象,可以根据对象的不同类型而表现出不同的行为。在Lua中,由于其动态类型的特性,多态是通过函数重载来实现的。也就是说,可以编写多个函数具有相同的名称但接受不同类型的参数,在运行时根据传入的参数类型来动态地选择相应的函数执行。
以下是一个简单的示例,展示如何在Lua中实现多态:
luaCopy Code-- 定义函数多态
function drawShape(shape)
shape:draw()
end
-- 定义不同类型的对象
local myShape = {
name = "Shape",
draw = function(self)
print("Drawing a " .. self.name)
end
}
local myCircle = {
name = "Circle",
draw = function(self)
print("Drawing a " .. self.name)
end
}
-- 调用多态函数
drawShape(myShape) -- 输出 "Drawing a Shape"
drawShape(myCircle) -- 输出 "Drawing a Circle"
在上述示例中,drawShape
函数接受一个参数,并通过调用参数的 draw
方法来实现多态。根据传入的对象类型的不同,函数会调用相应类型的 draw
方法,从而展现出不同的行为。