Inheritance/Single: Difference between revisions
Content added Content deleted
(→{{header|Lua}}: added Lua solution) |
|||
Line 1,193: | Line 1,193: | ||
... |
... |
||
:- end_object.</lang> |
:- end_object.</lang> |
||
=={{header|Lua}}== |
|||
Lua has no in-built formal OOP mechanism, though there are many possible ways of implementing work-alikes. |
|||
<lang lua>Class = { |
|||
classname = "Class aka Object aka Root-Of-Tree", |
|||
new = function(s,t) |
|||
s.__index = s |
|||
local instance = setmetatable(t or {}, s) |
|||
instance.parent = s |
|||
return instance |
|||
end |
|||
} |
|||
Animal = Class:new{classname="Animal", speak=function(s) return s.voice or "("..s.classname.." has no voice)" end } |
|||
Cat = Animal:new{classname="Cat", voice="meow"} |
|||
Dog = Animal:new{classname="Dog", voice="woof"} |
|||
Lab = Dog:new{classname="Lab", voice="bark"} |
|||
Collie = Dog:new{classname="Collie"} -- subclass without a unique voice |
|||
print("Animal:speak(): " .. Animal:speak()) |
|||
print("Cat:speak(): " .. Cat:speak()) |
|||
print("Dog:speak(): " .. Dog:speak()) |
|||
print("Lab:speak(): " .. Lab:speak()) |
|||
print("Collie:speak(): " .. Collie:speak()) |
|||
max = Collie:new{voice="Hi, I am Max the talking Collie!"} -- instance with a unique voice |
|||
print("max:speak(): " .. max:speak()) |
|||
print("max himself is (instance): " .. max.classname) |
|||
print("max's parent is (class): " .. max.parent.classname) |
|||
print("max's parent's parent is (class): " .. max.parent.parent.classname) |
|||
print("max's parent's parent's parent is (class): " .. max.parent.parent.parent.classname) |
|||
print("max's parent's parent's parent's parent is (class): " .. max.parent.parent.parent.parent.classname) |
|||
print("max's parent's parent's parent's parent's parent is (nil reference): " .. tostring(max.parent.parent.parent.parent.parent))</lang> |
|||
{{out}} |
|||
<pre>Animal:speak(): (Animal has no voice) |
|||
Cat:speak(): meow |
|||
Dog:speak(): woof |
|||
Lab:speak(): bark |
|||
Collie:speak(): woof |
|||
max:speak(): Hi, I am Max the talking Collie! |
|||
max himself is (instance): Collie |
|||
max's parent is (class): Collie |
|||
max's parent's parent is (class): Dog |
|||
max's parent's parent's parent is (class): Animal |
|||
max's parent's parent's parent's parent is (class): Class aka Object aka Root-Of-Tree |
|||
max's parent's parent's parent's parent's parent is (nil reference): nil</pre> |
|||
=={{header|M2000 Interpreter}}== |
=={{header|M2000 Interpreter}}== |