テーブルに対してキー値を参照する場合、
- 対象テーブル
- 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 件のコメント:
コメントを投稿