最近気づいた継承と mixin の違い
最近気づいたんですが、
- 継承したスーパークラスのクラスメソッドをサブクラスから呼べる
- mixin したモジュールのクラスメソッドは呼べない
っていう違いがあるんですね。
class Super def self.super_class_method "Super#super_class_method" end def super_instance_method "Super#super_instance_method" end end module M def self.module_class_method "M#module_class_method" end def module_instance_method "M#module_instance_method" end end class Sub < Super include M extend M # スーパークラスのクラスメソッドは呼べる pp super_class_method # mixin したモジュールのクラスメソッドは呼べない # pp module_class_method def sub_instance_method # インスタンスメソッドはどっちからでも呼べる pp super_instance_method pp module_instance_method end end Sub.new.sub_instance_method
あんまり Ruby で継承するってことはやらないのでスーパークラスのクラスメソッドをサブクラスから呼べるのは知らなかった。