lua中 面向对象 如何子类与父类方法名一样 如何调用到父类方法
时间: 2024-10-11 20:17:48 浏览: 6
在Lua中,虽然它不是一种纯粹的面向对象语言,但它支持轻量级的原型式继承,可以模拟类的概念。如果你想要创建一个子类并重写父类的方法,但实际上保持方法名称一致,你可以使用以下策略:
1. **闭包(Closure)模拟**:
Lua中并没有直接的类和继承机制,但可以利用函数作为闭包来模拟。你可以定义一个"构造函数"(实际上是一个普通函数),并在其中设置一些默认的行为,然后在子类中通过修改这个函数的内部状态来覆盖父类的方法。
```lua
local BaseClass = {
method_name = function(self) print("Base class method") end
}
function SubClass:new()
local instance = setmetatable({}, BaseClass)
-- 在这里添加对父类方法的重写
instance.method_name = function(self) print("Subclass method") end
return instance
end
local obj = SubClass:new()
obj.method_name() -- 输出 "Subclass method"
```
在这个例子中,`method_name`在子类`SubClass`中被重写了,但在未创建子类实例之前,它还是调用父类的原始方法。
2. **间接调用**:
如果你想在子类中直接保留父类的方法名,可以先调用父类的方法,然后再做额外的操作。例如:
```lua
function SubClass.method_name(self)
BaseClass.method_name(self) -- 调用父类方法
print("Additional subclass behavior")
end
```
当你需要调用这个方法时,会首先执行父类的方法,之后执行子类自定义的部分。