lua语言继承和多态
时间: 2023-08-04 15:11:17 浏览: 108
继承和多态
Lua语言支持面向对象编程,其中继承和多态是面向对象编程中的重要概念。
在Lua中,通过使用metatable和__index元方法来实现继承。当一个表的__index元方法指向另一个表时,如果在当前表中没有找到某个key,就会到父表中查找。这样,子表就可以继承父表中的字段和方法。同时,子表可以通过在自己的表中定义与父表同名的字段和方法来覆盖父表中的同名字段和方法,从而实现多态。
例如,定义一个Animal类和一个Dog类,使Dog类继承Animal类:
```lua
-- Animal类
local Animal = {}
Animal.__index = Animal
function Animal:new(name)
local obj = {}
obj.name = name
setmetatable(obj, self)
return obj
end
function Animal:speak()
print("I am an animal.")
end
-- Dog类继承Animal类
local Dog = {}
Dog.__index = Dog
setmetatable(Dog, Animal)
function Dog:new(name)
local obj = Animal:new(name)
setmetatable(obj, self)
return obj
end
function Dog:speak()
print("I am a dog.")
end
-- 测试代码
local animal = Animal:new("Tom")
animal:speak() -- I am an animal.
local dog = Dog:new("Lucy")
dog:speak() -- I am a dog.
```
在上面的代码中,Animal类和Dog类都有一个speak方法,但是它们的实现不同。当调用dog:speak()时,会输出"I am a dog.",而不是"I am an animal.",这就是多态的体现。
总之,Lua通过metatable和__index元方法的灵活运用,可以很好地支持继承和多态。
阅读全文