質問: 子クラスのインスタンスから親クラスのインスタンス変数の内容を表示する親クラスのメソッドを叩きたい お世話になっております。 rubyのコーディングで疑問が発生しましたので、質問させてください。 以下の様にクラスを定義してあるとします クラスa 体裁を整えて標準出力するクラス ・インスタンス変数@aを持つ ・@aを元に整形して標準出力する振る舞いを持つ クラスb aの子クラスで、標準出力する内容を細かく設定するクラス ・独自のインスタンス変数は持たない ・親クラスのインスタンス変数@aを編集する振る舞いを持つ 上記の実装である時、クラスbの振る舞いでクラスaのインスタンス変数@aを編集しようとした際にエラーが発生します。 尚、レシーバはsuperです。 エラー内容 ./clsb.rb:49:in `edt_dsp': super: no superclass method `edt_dsp' (nomethode rror) エラー文中に出てる'edt_dsp'というメソッドが親クラスのインスタンス変数を編集するメソッドです。 尚、子クラスには独自の変数は無いのでinitializeメソッドは定義していません。 なぜこのようなエラーが発生してしまうのかわからず困っています。 現在自分でも色々とサイトを回って調べていますが、解決には至っていません。 ご回答いただければ幸いです。 以上です。よろしくお願いします。
回答: インスタンス変数 @a は、インスタンス(オブジェクト)に付随したもので、祖先・子孫クラスでも共通です。 クラス定義aの中で現れるインスタンス@aと、子クラス定義bの中で現れるインスタンス変数@aが別物と誤解されているようですが、違います。同じオブジェクトであれば同じものです。 従って、@a でアクセスします。 ちなみに、super.a とかくと、「親の同名メソッドを呼び出して、その結果のオブジェクトのメソッドaを呼び出す」という文法上正当な表現ではありますが、やりたいこととは全く違います。