java中modifier_Ruby中的private modifier与Java中的对比

先看一下Java的private modifier对于相同类型的不同对象是否有限制。

public class PrivateMethod {

private StringBuilder sb;

public PrivateMethod(String sb) {

this.sb = new StringBuilder(sb);

}

private String getSB(){

return sb.toString();

}

public String invokeOtherPrivateMethod(PrivateMethod other){

return this.getSB() + other.getSB();

}

public static void main(String[] args) {

final PrivateMethod a = new PrivateMethod("a ");

final PrivateMethod b = new PrivateMethod("+ b");

System.out.println(a.invokeOtherPrivateMethod(b));

}

}

有Java基础的人都可以预料,JVM可以正常编译通过并且运行打印出:

a + b

然后,来看一下Ruby:

首先定义一个基础类型 ModifierCheckclass ModifierCheck

private

def private_check

puts "我是一个私有方法#{__id__}"

end

public

def public_check(other)

puts "我是一个公有方法#{__id__}"

other.protected_check

end

protected

def protected_check

puts "我是一个保护方法#{__id__}"

end

end

然后定义一个子类并且执行class ModifierCheckSub 

def public_check

private_check

"==>你不是已经私有了么。。"

end

end

modifier = ModifierCheckSub.new

puts modifier.public_check

最后执行结果我是一个私有方法70198988112100

==>你不是已经私有了么。。

上面可以发现在子类中可以调用父类的私有方法,与Java完全不同。

这里如果要问,为何Java的例子完全不写个子类来调用一下父类的private方法?这个还用说么,还没到运行时,直接编译器都过不了。

接下来,来看一下在子类中是否可以override父类的私有方法,在子类中添加以下的部分:def private_check

puts "我是覆盖私有方法的子方法"

end

执行结果:我是覆盖私有方法的子方法

==>你不是已经私有了么。。

看,在子类中可以Override父类的私有方法。最后也许让我疑惑的私有在哪里,那么,来试一下最后这个。依然在子类中添加:def invokeOtherPrivateMethod(other)

other.private_check

end

#而执行部分修改为:

modifier = ModifierCheckSub.new

modifier2 = ModifierCheck.new

modifier.invokeOtherPrivateMethod modifier2

这个时候执行直接报错:in `invokeOtherPrivateMethod': private method `private_check' called for #<0x007f8bc2a13df8> (NoMethodError)0x007f8bc2a13df8>

最终好像看出点什么,也许借鉴于Java与Ruby的静态/动态语言之分,

private的访问级别:在Java中限制在同一个类中,而Ruby限制在同一个对象中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值