OOPC#やJavaのプログラマがRubyの世界にやってくると「あれれ?」と思ってしまう言語仕様をまた見つけてしまいました。タイトルにも書いた通り、Rubyのクラスメソッドは同じクラスのprotectedメソッドやprivateメソッドにアクセスできません。言葉だけではピンと来ないと思うので、サンプルコードを見てみましょう。これは正常に動作します。}}実行結果publicprotectedprivateつまりC#の場合、同じクラスであればprotectedであれ、privateであれ、どのメソッドも呼び出せます。これはJavaも同じはずです。これとほぼ同等のコードをRubyで書いてみます。#<Hoge:0x869cd98>C#とは異なり、protectedとprivateのインスタンスメソッドを呼び出すとエラーが発生しました。Rubyのprivateメソッドはレシーバ経由で呼び出せないということは知っていたので、privateメソッドでエラーが出るのは分かるのですが、protectedメソッドでもエラーが起きるのはちょっと予想外でした。いえ、C#やJavaとは誕生の経緯や設計の思想も違うので、C#やJavaの常識が通用しない点が出てくるのは以前のエントリにも書いた通りです。今後もC#やJavaからRubyへ転向してきたプログラマがつまずきそうなポイントを見つけたら、またこのブログでご紹介しますね。try以前はオブジェクト指向言語ならどれも同じだろうと思っていたので、この言語仕様を知った時はかなり驚きました。Matz先生自身にRubyの設計思想を教えてもらったので、大変勉強になりました。最近Rubyを勉強しています。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。