Ruby ではなぜ子クラスが親のプライベート メソッドにアクセスできるのでしょうか?
概要
class Main
def say_hello
puts "Hello"
end
private
def say_hi
puts "hi"
end
end
class SubMain < Main
def say_hello
puts "Testing #{say_hi}"
end
end
test = SubMain.new
test.say_hello()
出力:
解決策
違いは、Ruby ではサブクラスのプライベート メソッドを暗黙的に呼び出すことができるが、明示的には呼び出すことができないことです。 protected は両方の方法で呼び出すことができます。なぜですか?マッツさんに聞いてみると良いと思います。
例:
class TestMain
protected
def say_hola
puts "hola"
end
def say_ni_hao
puts "ni hao"
end
private
def say_hi
puts "hi"
end
def say_bonjour
puts "bonjour"
end
end
class SubMain < TestMain
def say_hellos
# works - protected/implicit
say_hola
# works - protected/explicit
self.say_ni_hao
# works - private/implicit
say_hi
# fails - private/explicit
self.say_bonjour
end
end
test = SubMain.new
test.say_hellos()