0

如果我在 Object 类(定义为私有)中定义一个方法,我怎么可能从另一个类中调用它?我的意思是,当我从 Dog 类内部调用 say_hello 时,如果 say_hello 是顶级定义的方法,因此它是 Object 类的私有方法,如何解决?我知道 Object 类在所有类的方法查找中,但是如果该方法是私有的,它不应该是可访问的吗?

def say_hello
  p "Hello"
end
class Dog
  def test_hello
    say_hello
  end
end

prova = Dog.new
prova.test_hello

我想对我的疑问的一个更简单的解释是:为什么我可以从孩子那里调用父母的私有方法?

class Animal
  private
  def prova
    p "hello"
  end
end
class Dog < Animal
  def test_hello
    prova
  end
end

prova = Dog.new
prova.test_hello
4

2 回答 2

0

Remember Dog inherits from Object, giving it access to Objects methods. You can extend the Object class all you want.

See answer to: How to extend class Object in Rails?

于 2013-03-18T23:18:16.080 回答
0

但是如果该方法是私有的,它不应该是可访问的吗?

什么让你有那个想法?

私有方法只能使用隐式接收器调用。您正在使用隐式接收器调用它。因此,它应该可以工作……而且确实可以。

于 2013-03-19T00:11:31.907 回答