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

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

 RubyJava
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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值