打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ruby的方法调用作用域
ruby的method作用域和Java一样,修饰词都有private,protected和public。其中public的含义都是一样的,但是private和protected却完全不一样。这一点在《Programming ruby》当中语焉不详。今天看了《ruby for rails》第7章才搞明白了。

一、Java当中的含义:
private方法在Java当中的含义是只在当前类范围之内可以调用,当前类的子类也无法访问,但能被同一类别的其他对象实例调用,例如:

Java代码
 
  1. package com.javaeye;   
  2.   
  3. public class C {   
  4.   
  5.     private String name;   
  6.        
  7.     private String getName() {   
  8.         return name;   
  9.     }   
  10.        
  11.     public C(String name) {   
  12.         this.name = name;   
  13.     }   
  14.        
  15.     public boolean compare(C c) {   
  16.         return this.name == c.getName();   
  17.     }   
  18.        
  19. }  


protected方法在Java当中的含义是在当前类所在的整个package当中都可见,其他package类则无法访问;

二、Ruby当中的含义:
private在当前类以及子类都可以调用,其他类无法访问,比Java宽松一些,但private方法只能被当前对象隐式调用(self.),不能被同一类别的其他对象实例调用,这又比Java严格;

protected稍微宽松一些,可以被同一个类别的其他实例调用,例如:

Ruby代码
 
  1. class C   
  2.   def initialize(name)   
  3.     @name = name   
  4.   end  
  5.   
  6.   def compare(c)   
  7.     c.name == @name  
  8.   end  
  9.   
  10.   protected   
  11.   def name   
  12.     @name  
  13.   end  
  14. end  
  15.   
  16. class D < C   
  17. end  
  18.   
  19. d1 = D.new("fankai")   
  20. d2 = D.new("hello")   
  21.   
  22. puts d1.compare(d2)  


在类别C当中使用c.name,如果name方法是private的话,只能使用self调用,即只能当前对象实例在当前类范围内调用;如果name方法是protected的话,那么可以使用同一类的对象实例显式调用,即可以引用其他对象实例的name方法。

因此private和protected的在ruby当前和Java的定义有很大的区别:

1、在不同对象实例当中的作用域不同
Java当中,不管private还是protected的方法,都可以被同一个类别的其他对象实例调用;
Ruby当中,private方法不能被同一个类别的其他对象实例调用;

2、在类继承关系当中的作用域不同
ruby当中,不管private还是protected方法,都可以被子类继承;
Java当中,private方法不能被子类继承;

这种方法调用的差异,也许来自于不同的面向对象理念:Java的面向对象来自C++,强调类继承关系,所以方法调用限定类继承的层次结构当中的作用域,却不强调对象实例作用域;而ruby的面向对象来自smalltalk,即使是类别也是对象,因此方法调用作用域都是针对对象实例调用来设置的。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ruby基础(三)
RUBY中的变量(记录在此,避免忘记^
ruby系列教材(1):Ruby Is an Object-Oriented Language
跨越边界: 闭包
深入理解JavaScript系列(17):面向对象编程之概论
C#委托浅析与漫谈
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服