7-1-3 オブジェクトのクラスを確認する方法をおさえよう

インスタンスのクラスを確認するclassメソッド

クラスは階層的に定義されていますが、クラスに直接属しているオブジェクトのことをインスタンスと呼びます。

たとえば、Integerクラスに属している1という整数オブジェクトは、Integerクラスのインスタンスです。

インスタンスのクラスを確認するには、classメソッドを使います。

オブジェクト.classと記述するとそのオブジェクトのクラス名が戻り値に返却されます。

スーパークラス

スーパークラスとは、子クラスから見た場合の親クラスのことです。

一方、親クラスから見て継承関係にある子クラスは、サブクラスと呼ばれることもあります。

たとえば、Integerクラスから見てNumericクラスはスーパークラスです。また、Numericクラスから見てIntegerクラスはサブクラスです。

Rubyでは、superclassというメソッドを使うと、子クラスから見た場合の1つ上の親クラスを取得することができます。クラス.superclassとして使用します。

is_a?メソッド

is_a?メソッドは、オブジェクト.is_a?(クラス)のように記述します。

is_a?メソッドは、引数に指定されたクラスが継承関係も含めて親クラスに存在するかを真偽値で返却します。

継承関係も含めるので、BasicObjectObjectを引数に指定すると、Rubyではオブジェクトによらずtrueが返却されることとなります。

instance_of?メソッド

instance_of?メソッドは、オブジェクト.instance_of?(クラス)のように記述します。

instance_of?メソッドは、オブジェクトが引数に指定されたクラスのインスタンスであるかを真偽値で返却します。

is_a?メソッドとの違いは、継承関係を含めない点です。

オブジェクトのクラスを確認する方法のまとめ

  • classメソッドでインスタンスのクラスを確認できる
  • superclassメソッドで親クラスを確認できる
  • is_a?メソッドでインスタンスがクラスに属するか継承関係も含めて確認できる
  • instance_of?メソッドでインスタンスが直接そのクラスに属するか確認できる