子类继承父类,在子类中就可以访问到父类中的公开的字段和方法。 下面的代码是Father类作为父类,Boy为子类继承自Father。 Boy既可以看作实例化的对象,同时也可以看作子类并添加构造方法。 代码如下:

--声明父类
Father={name}

function Father:Init(name)
local temp={}
setmetatable(temp,self)
self.__index=self
self.name=name
return temp
end

function Father:talk()
print(Father.name..”,”..”我是你父类”)
end

–声明子类,继承自父类
–括号内可以写nil,也可以不写
Boy=Father:Init(nil)

function Boy:Init(name)
–继承的核心代码:
local temp=Father:Init(name)
setmetatable(temp,self)
self.__index=self
Boy.name=name
return temp
end

function Boy:shoot()
print(Boy.name..”,”..”我是你子类”)
end

–实例化一个子类对象
boy=Boy:Init(“武哥哥”)
–调用子类的方法
boy.shoot()
–调用父类的方法
boy.talk()

结果如下:

>lua -e “io.stdout:setvbuf ‘no’” “4.lua”
武哥哥,我是你子类
武哥哥,我是你父类

Exit code: 0