重载Ruby中的受保护和私有方法

时间:2016-08-29 09:46:00

标签: java ruby overloading

在Java中,我有以下代码:

protected int add(int a, int b) {
    return a + b;
}
private int add(int a, int b, int c) {
    return a + b + c;
}

我确实意识到你可以使用*args参数在Ruby中实现上述目的。但是,您将无法区分该方法的私有受保护的版本。在Ruby中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

Ruby中私有和受保护方法的概念与Java之类的语言有些不同(好吧,不是那么公开,非常相似:))。在Java中,如果方法被声明为私有,则只能从同一类中的其他方法访问它。当一个方法被声明为protected时,它可以被同一个包中的其他类以及它在不同包中的类的子类访问

   class A
     def main_method
       method1
     end

     private
      def method1
       puts "hello from #{self.class}"
      end
   end

   class B < A
    def main_method
     method1
    end
   end

   A.new.main_method
   B.new.main_method


  Print: =
  hello from A
  hello from B

尝试使用显式接收器,即使接收器是“self”,方法调用也会失败,例如。

class C < A
  def main_method
   self.method1
  end
end

C.new.main_method

提供#{1}} method1'调用#(NoMethodError)

main_method': private method

打印 你好 你好。来自B. 你好,来自C

您可以阅读有关隐式接收器的更多信息以了解它。

答案 1 :(得分:0)

不,你无法做到这一点。 Ruby中没有重载。没有私有和受保护的版本 s (复数)。只有一种方法。这种方法可以受到保护,也可以是私有的,但不能同时保密。