在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中有没有办法做到这一点?
答案 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 (复数)。只有一种方法。这种方法可以受到保护,也可以是私有的,但不能同时保密。