最近开始接触Ruby,发现语法很有特点,而大家都喜欢拿Java和Ruby进行比较,本文着重对类的方法访问权限进行介绍。
Ruby官方网给出了Ruby和Java的相似点和相异点:
英文:https://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/
中文:https://www.ruby-lang.org/zh_cn/documentation/ruby-from-other-languages/to-ruby-from-java/
可以看出,Ruby的类和Java一样,都有public、private和protected这三种方法,而如果不指定访问权限,会有默认的访问权限default,下表分别对这些访问权限进行了详细的介绍。
Ruby | Java | |
---|---|---|
public | 没有访问限制 | 没有访问限制 |
protected | 本类和子类的实例可以访问 | 子类和相同包内的类可以访问 |
private | 本类和子类的实例可以访问,同一类别的不同实例无法相互访问 | 本类内部可以访问 |
default | 没有访问限制 | 相同包内的类可以访问 |
首先,对于public方法,Ruby和Java没有太大的区别。
然后,对于protected方法,通过下面的例子我们可以进行比较:
package package1;
public class Parent {
protected void method() {
}
public void test() {
method(); //本类内部访问
}
}
class Child extends Parent {
public void test() {
method(); //子类访问
}
}
class Test1 {
public void test() {
new Parent().method(); //相同包内的类内部可以访问
}
}
package package2;
import package1.Parent;
public class Test2 {
public void test() {
new Parent().method(); //错误!不同包内的类无法访问
}
}
class Parent
protected
def method
end
public
def test
method #本类实例访问
Parent.new.method #本类其它实例访问
end
end
class Child
protected
def method
end
public
def test
method #子类实例访问
end
end
class Test
def test
Parent.new.method #错误!不同类无法访问
end
end
而对于private方法,通过下面的例子我们可以进行比较:
package package1;
public class Parent {
private void method() {
}
public void test() {
method(); //本类内部访问
}
}
class Child extends Parent {
public void test() {
method(); //错误!子类无法访问
}
}
class Test1 {
public void test() {
new Parent().method(); //错误!相同包内的类内部无法访问
}
}
class Parent
private
def method
end
public
def test
method #本类实例访问
Parent.new.method #错误!本类其它实例无法访问
end
end
class Child
private
def method
end
public
def test
method #子类实例访问
end
end
class Test
def test
Parent.new.method #错误!不同类无法访问
end
end
最后,对于default方法,在Ruby中其默认为public方法,而在Java中其相当于protected方法去掉子类访问的权限。
转载请注明出处:http://blog.csdn.net/sunset108/article/details/48372953