如何继承方法?

我想要从“Create”中继承“GetName”或“其他方法”用于“CreateInherited”,并且我想要从“CreateInherited”保存唯一的方法(如“GetInheritName”),但我不知道怎么做。

我的测试代码:

local MainTbl = {}

function MainTbl:Create(name)
    local tbl = {}
    tbl.name = name or 'Null'

    function tbl:GetName()
        return self.name
    end

    setmetatable(tbl, self)
    self.__index = self
    return tbl
end

function MainTbl:CreateInherited(name)
    local tbl = {}
    tbl.name = name or 'Null'

    function tbl:GetInheritName()
        return self.name
    end

    setmetatable(tbl, self)
    self.__index = self
    return tbl
end

local Man = MainTbl:Create('Man')
local Woman = MainTbl:CreateInherited('Woman')

print(Man:GetName())
print(Woman:GetName())
print(Woman:GetInheritName())
点赞
用户3574628
用户3574628

如果我理解你的意思,你正在尝试将两个不同的构造函数放入单个类中。请注意,Create 执行了 CreateInherited 需要执行的大部分工作,因此您可以通过在 CreateInherited 中调用 Create 来节省大量重复的代码。您可以从 Create 中的完整实例开始,并添加一个方法,而不是从空表开始。

function MainTbl:CreateInherited(name)
    local tbl = self:Create(name)

    function tbl:GetInheritName()
        return self.name
    end

    return tbl
end
2020-07-04 16:58:29