Base class

Classes / Inheritance

local Shape = {}
Shape.__index = Shape

function Shape.new(line_count)
  return setmetatable({line_count = line_count},
                      Shape)
end

function Shape:describe()
  return "a shape with " .. self.line_count
         .. " lines"
end

local Square = {}
Square.__index = Square
-- What Square lacks is looked up in Shape
setmetatable(Square, {__index = Shape})

function Square.new(side_length)
  -- The base part is built by Shape
  local square = Shape.new(4)
  square.side_length = side_length
  return setmetatable(square, Square)
end

local square = Square.new(5)
-- square.line_count = 4
-- square.side_length = 5
-- Square has no describe: found in Shape
local description = square:describe()
-- description = a shape with 4 lines

print("square.line_count = " .. square.line_count)
print("square.side_length = "
      .. square.side_length)
print("description = " .. description)