local M= {} local private= {} -- holds private data of all objecs in subtables -- Class Point: -- -- ... -- CLASS MovablePoint: -- local MovablePoint_proto= {} -- Class prototype function MovablePoint_proto:move(dx, dy) local priv= private[self] priv.x= priv.x+dx priv.y= priv.y+dy end MovablePoint_proto.__index = MovablePoint_proto MovablePoint_proto.__newindex= Point_proto.__newindex setmetatable(MovablePoint_proto, Point_proto) -- Inherit from Point function M.new_MovablePoint(x,y) -- constructor local instance= M.new_Point(x,y) -- call parent constructor setmetatable(instance, MovablePoint_proto) return instance end return M