テーブルに対してキー値を参照する場合、
- 対象テーブル
- 1のテーブルのメタテーブル内の__indexメタメソッドにセットされているテーブル
- 2のテーブルのメタテーブル内の__indexメタメソッドにセットされているテーブル
- ・・・
__indexメタメソッドに基底クラスをセットする事で継承関係を実現出来る。
function createClass( baseClass )
local new_class = {}
local class_mt = { __index = new_class }
function new_class:create()
return setmetatable( {}, class_mt )
end
if baseClass then
setmetatable( new_class, { __index = baseClass } )
end
return new_class
end
baseClass = createClass()
function baseClass:setValue(value)
self.value = value
end
function baseClass:show()
print( string.format("baseValue is %s", self.value) )
end
inheritedClass = createClass( baseClass )
function inheritedClass:show()
print( string.format("inheritedValue is %s", self.value) )
end
baseInstance = baseClass:create()
baseInstance:setValue(10)
baseInstance:show()
inheritedInstance = inheritedClass:create()
inheritedInstance:setValue(20)
inheritedInstance:show()
上記サンプルコードでは、
- 基底クラスでのみsetValue関数を定義し、派生クラス側でも利用できる事
- 派生クラスで定義したshow関数が基底クラスの同関数をオーバーライドする事
を確認している。
[参考]
0 件のコメント:
コメントを投稿