staticメソッド内からのprotectedの呼び出し -ruby編-
「Aを継承したBのstaticメソッドからAのprotectedメソッドを呼びたい場合。」のruby版。
rubyで静的メソッドの宣言がわからなかったので、そこから。
rubyでのstatic = クラスメソッド(特異メソッド)
class hoge def self.foo # hogehoge end end hoge.foo # =>インスタンスなしで呼び出し可
どうすればメソッドを呼べる?
protectedメソッドを呼ぶためのpublicメソッドを定義して、それを呼ぶ。
class A def foo puts "foo" end protected :foo end class B < A def self.bar B.new.hoge end def hoge self.foo end end B.bar # => "foo"
いやちょっと・・・
確かに目的は果たせたが・・・
せっかくprotectedで隠蔽してるのに、publicにしてしまうメソッドを作っていいのだろうか?
結局は
呼ばれたくないからprotectedにしている。
インスタンスの外から使いたいなら、最初からpublicにするなりクラス設計見直すなりしろと。