継承
参考:
Ruby の継承とオーバーライドについてまとめてみた | Java からの Ruby on Rails 入門
クラス・メソッド・initialize の継承 – Qiita
クラスの継承を確認する
祖先クラスの一覧を配列として取得する。
> obj.class.ancestors
参考:
特定のクラスが別のクラスを継承しているか判定する方法 – Qiita
Ruby でメソッド一覧、継承クラス一覧、include したモジュールを確認するメソッドたち | 気軽に楽しくプログラムと遊ぶ
super
参考:
`super`キーワードの4つの側面 翻訳 | TechRacho
スーパークラスのメソッドを呼び出す | Ruby 入門 (www.javadrive.jp)
引数があるスーパークラスのメソッドを呼び出す | Ruby 入門 (www.javadrive.jp)
super の super を呼び出す
superclass
、instance_method
、bind
を使う。
grand_superclass = self.class.superclass.superclass grand_super_method = grand_superclass.instance_method(__method__) grand_super_method.bind(self).call(*args, &block)
参考:
instance method Class#superclass (Ruby 2.6.0)
instance method Module#instance_method (Ruby 2.6.0)
instance method UnboundMethod#bind (Ruby 2.6.0)
instance method Method#=== (Ruby 2.6.0)
Calling super’s super method – Stack Overflow
initialize の継承
new
呼び出し時の引数が渡される (引数の数が異なると呼び出し時にエラーが発生する)- 明示的に
super
を呼び出す
参考:
Ruby の initialize メソッドの継承 | Worth Living
Is it possible to override #initialize in a Ruby module? – Stack Overflow
Class.new
親クラスを指定してクラスを動的に生成する。
klass = Class.new(Parent)
クラスをその場で定義する。(クラスの本体をブロックで与える。)
klass = Class.new do class << self attr_accessor :name end self.name = "MyClass" end
参考:
Random Ruby Tricks: Class.new | Literate Programming by Steve Klabnik