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?
メソッドは、引数に指定されたクラスが継承関係も含めて親クラスに存在するかを真偽値で返却します。
継承関係も含めるので、BasicObject
やObject
を引数に指定すると、Rubyではオブジェクトによらずtrue
が返却されることとなります。
instance_of?
メソッド
instance_of?
メソッドは、オブジェクト.instance_of?(クラス)
のように記述します。
instance_of?
メソッドは、オブジェクトが引数に指定されたクラスのインスタンスであるかを真偽値で返却します。
is_a?
メソッドとの違いは、継承関係を含めない点です。
オブジェクトのクラスを確認する方法のまとめ
class
メソッドでインスタンスのクラスを確認できるsuperclass
メソッドで親クラスを確認できるis_a?
メソッドでインスタンスがクラスに属するか継承関係も含めて確認できるinstance_of?
メソッドでインスタンスが直接そのクラスに属するか確認できる