Rubyがミニツク

あなたのRubyの技術に関するより詳しい知識と理解を増やします。

Ruby入門コース

このコースについて

Rubyのeラーニング研修システムはRailsを使ってWebアプリケーション開発ができる技術者の育成を目指します。 そのため、Railsを扱うことができるだけのRubyの知識を得ることがRuby入門コースの目標となっています。

コンテンツ一覧

ヒント レッスンの名前をクリックすると、その内容を表示します。

次のコンテンツ ホームへ戻る

オーバーライド

継承をおこなうことによって、同じ機能を別のクラスに提供することができます。以下のようにスーパークラスで定義していたメソッドと同じ名前をサブクラスで定義します。

class Foo
  def foo
    puts("foo")
  end
end
class Bar < Foo
  def foo
    puts("override")
  end
end
bar = Bar.new
bar.foo  #=> override

このようにサブクラスで同じ名前のメソッドを定義し直すことをオーバーライドと呼びます。オーバーライドをおこなうことによって、スーパークラスで定義していたメソッドをサブクラスで書き換えることができます。またオーバーライドしたメソッドをサブクラスで呼び出すこともできます。

class Foo
  def foo
    puts("foo")
  end
end
class Bar < Foo
  def foo
    super
    puts("foo")
    super
  end
end
bar = Bar.new
bar.foo

superを使うことによって、オーバーライドされたメソッドの元の振る舞いを呼び出します。また、サブクラスでオーバーライドしたメソッドでは、コードのコピーをおこなわずに機能を拡張できます。次にsuperへ引数を与えた時の動きを見ます。

class Foo
  def foo(args=5)
    p args * 2 
  end
end
class Bar < Foo
  def foo(args=2)
    super(10)
    super
    super()
  end
end
bar = Bar.new
bar.foo
  #=> 20
  #=> 4
  #=> 10

もし引数を指定しなかった時は、メソッドに定義されたデフォルト値が渡されます。引数を渡さずにオーバーライドしたメソッドを呼ぶには、super()と書きます。ただsuperと書いて()を省略すると、サブクラスのオーバーライドしたメソッドの引数のデフォルト値が渡されます。

superclassメソッド

あるクラスのスーパークラスを知りたい時は、superclassメソッドを使うことで調べることができます。レシーバに指定したクラスのスーパークラスが返ってきます。

class Foo
end
class Bar < Foo
end
p Bar.superclass  #=> Foo


次のコンテンツ ホームへ戻る