重写父类构造函数

类 / 构造函数

local Man = {}
Man.__index = Man

function Man.new(name)
  return setmetatable({
    name = name,
    kind = "man",
  }, Man)
end

local Employee = {}
Employee.__index = Employee
setmetatable(Employee, {__index = Man})

-- No own new yet: the one of Man is found
local inherited = Employee.new == Man.new
-- inherited = true

-- The same name in Employee hides it
function Employee.new(name)
  -- Man.new is not called
  return setmetatable({
    name = name,
    position = "unknown",
  }, Employee)
end

local overridden = Employee.new ~= Man.new
-- overridden = true

local employee = Employee.new("Max")
-- employee.name = Max
-- employee.position = unknown
local kind = employee.kind
-- kind = nil

print("inherited = " .. tostring(inherited))
print("overridden = " .. tostring(overridden))
print("employee.name = " .. employee.name)
print("employee.position = "
      .. employee.position)
print("kind = " .. tostring(kind))