継承
- rubyでは単一継承のみ
- 多重継承は、mix-in(後述)という概念で対応している
class SuperClass
def super_say
p "super_hello"
end
end
class SubClass < SuperClass
def sub_say
p "sub_hello"
end
def super_say
p "sub_super_hello"
super
end
end
subClass = SubClass.new
subClass.sub_say
subClass.super_say
モジュール
- 概念的には、クラスに近いが、インスタンスやサブクラスは作れない(後述するmix-inの為)
- 実は、Class は Module の サブクラス
- 名前空間に使うものというイメージだけど、mix-in という概念にも使える
module TestModule
def say
p "hello"
end
def self.say
p "hello_self"
end
end
TestModule.say
mix-in
以下の特徴を持つ抽象クラス(mix-in クラス)のみ多重継承を許可する事で、多重継承を安全に行う仕組み
include
class IncludedClass
include TestModule
end
includedClass = IncludedClass.new
IncludedClass.say
モジュール関数
module TestModule
def say
p "hello"
end
module_function :module_func_say
end
TestModule.say
class TestClass
def saysay
say
end
end
TestClass.new.saysay
extend
class ExtendedClass
extend TestModule
end
ExtendedClass.say
extendedClass = ExtendedClass.new
extendedClass.extend TestModule
extendedClass.say
mainにextend
- mainにextendすれば、どこからでも呼び出せる
extend TestModule
say