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))