【Ruby】Ruby和Java比较——方法访问权限

来源:互联网 发布:淘宝招聘模特 编辑:程序博客网 时间:2024/06/07 20:06

最近开始接触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,下表分别对这些访问权限进行了详细的介绍。

 RubyJavapublic没有访问限制没有访问限制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 #本类其它实例访问   endendclass Child   protected  def method  end  public  def test    method #子类实例访问  endendclass Test  def test    Parent.new.method #错误!不同类无法访问  endend

而对于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 #错误!本类其它实例无法访问   endendclass Child   private  def method  end  public  def test    method #子类实例访问  endendclass Test  def test    Parent.new.method #错误!不同类无法访问  endend
最后,对于default方法,在Ruby中其默认为public方法,而在Java中其相当于protected方法去掉子类访问的权限。


转载请注明出处:http://blog.csdn.net/sunset108/article/details/48372953


0 0
原创粉丝点击