- 浏览: 82312 次
- 性别:
最近访客 更多访客>>
最新评论
-
Bernice_liu:
谢谢分享,受益匪浅,适合我——初学者
Ruby语言中文教程all in one -
何枫abc:
怎么感觉Ruby有点像C!!!
3.5 标识名和变量的作用域 3.6 类库 3.7 数据类型 -
何枫abc:
谢谢了!!!你写的很好,现在我正在学Ruby!!!
第二章 运行环境 -
yangzhihuan:
正想知道ruby是怎么样生成像javadoc那样的文档,多谢了 ...
3.1 注释与分行 -
whisper:
从lambda演算的角度说我们并不关心一个东西到底是什么,而只 ...
变量一定要有类型吗(一)
在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象的方法。控制了对方法的访问,也就控制了对对象属性的访问。
控制对方法的访问,有三种方式:
访问控制
|
意义
|
public
|
可以被任何实例对象调用,不存在访问控制;
|
protected
|
可以被定义它的类和其子类访问,
可以在类中或子类中指定给实例对象;
|
private
|
可以被定义它的类和其子类访问,
不能被实例对象调用。
|
方法默认都是公有的( initialize方法除外,它永远是私有的)。
看程序 E6.5-1.rb :
ruby 代码
- #E6.5-1.rb
- class Person
- def talk
- puts " public :talk, 将调用speak"
- speak
- end
- def speak
- puts "protected :speak,将调用laugh"
- laugh
- end
- def laugh
- puts " private:laugh"
- end
- protected :speak
- private :laugh
- end
- p1=Person.new
- p1.talk
- #p1.speak 实例对象不能访问protected方法
- #p1.laugh 实例对象不能访问private方法
运行结果:
>ruby E6.5-1.rb
public :talk, 将调用speak
protected:speak,将调用laugh
private:laugh
>Exit code: 0
再看程序 E6.5-2.rb :
ruby 代码
- #E6.5-2.rb
- class Person
- def speak
- "protected:speak "
- end
- def laugh
- " private:laugh"
- end
- protected :speak
- private :laugh
- end
- class Student < Person
- def useLaugh
- puts laugh
- end
- def useSpeak
- puts speak
- end
- end
- p2=Student.new
- p2. useLaugh # => private:laugh
- p2. useSpeak # => protected:speak
从程序 E6.5-1.rb 和程序 E6.5-2.rb ,我们没有看出 protected 和 private 的区别,到底区别在哪里呢?
答案在程序 E6.5-3.rb :
ruby 代码
- #E6.5-3.rb
- class Person
- def speak
- "protected:speak "
- end
- def laugh
- " private:laugh"
- end
- protected :speak
- private :laugh
- def useLaugh(another)
- puts another.laugh #这里错误,私有方法不能指定对象
- end
- def useSpeak(another)
- puts another.speak
- end
- end
- p1=Person.new
- p2=Person.new
- p2.useSpeak(p1) # => protected:speak
- #p2.useLaugh(p1)
从上面三个程序可以得出结论:
public方法,可以被定义它的类和其子类访问,可以被类和子类的实例对象调用;
protected方法,可以被定义它的类和其子类访问,不能被类和子类的实例对象直接调用,但是可以在类和子类中指定给实例对象;
private方法,可以被定义它的类和其子类访问,私有方法不能指定对象。
Ruby语言的访问控制是动态的,是在程序运行时刻确立的。你可以根据自己的需要,在程序的不同位置,改变某个方法的访问控制级别,让你的程序更加富于变化。
ruby 代码
- #E6.5-4.rb
- class Person
- private #后面的方法设定为private
- def talk
- puts " already talk "
- end
- end
- p1=Person.new
- #p1.talk private方法不能访问
- class Person
- public :talk
- end
- p1.talk # => already talk
完整阅读,请看我写的 Ruby语言中文教程all in one
发表评论
-
8.4 迭代器、代码块、闭包
2007-02-13 06:25 1731先看一句代码: ruby 代码 (1..9). ... -
8.3 正则表达式
2007-02-13 06:13 1526一本入门小书,不想涉及正则表达式,但是正则表达式与Ruby语言 ... -
8.2 再说字符串
2007-02-13 06:07 1257一. 生成一个字符串 字 ... -
8.1 再说数组
2007-02-13 06:03 1382一. 建立一个数组 ruby 代码 #E8.1- ... -
7.4 require 和 load
2007-02-13 05:59 1313程序 E7.3-1.rb中先写了Me模块,然后include ... -
7.3 糅和(Mix-in) 与多重继承
2007-02-13 05:55 1773糅和,也译作混合插入,也许就称作 Mix-in 比较合适。 现 ... -
7.1 模块 7.2 命名空间
2007-02-13 05:50 22077.1 模块 我们常常把许 ... -
6.4 单例方法
2007-02-13 05:16 1004同一份设计蓝图(类),不同的实例对象,可以表现出不同的行为特征 ... -
6.3 实例变量、类变量、类方法
2007-02-13 05:28 2241学习编程的过程,就是深化理解变量的过程。在面向对象编程中也不例 ... -
6.2 增强父类方法
2007-02-13 04:39 972如果我们只是想增强父类的方法,而不是完全地替代它,就可以用关键 ... -
6.1 重载?重写
2007-02-13 04:11 1886在Java 中,重载(overload)和重写(overrid ... -
5.5 一些编码建议
2007-02-13 03:37 1073这里不是 Ruby语言的编 ... -
5.4 蓝图可以改变吗? ——动态语言
2007-02-13 03:28 747Ruby 是动态语言,你可以改变 Ruby 程序的结构,功能, ... -
5.3 详解变量—— 动态类型
2007-02-13 03:22 1100变量是什么?变量有哪些特征呢?学习编程的过程,就是深化理解变量 ... -
5.1 为什么是Ruby? 5.2 Ruby会长久么?
2007-02-13 03:16 9725.1 为什么是Ruby? 现 ... -
4.5 多态
2007-02-13 03:07 768不同的子类继承一个父 ... -
4.4 继承
2007-02-13 03:04 797如果我们要写一个学生 ... -
4.3 封装
2007-02-13 02:53 894让我们来定义一个类,类名是Person,类名首字母要大写;属性 ... -
4.1 两种思维方式 4.2 对象
2007-02-13 02:47 8924.1 两种思维方式 人们 ... -
3.11 一个综合小练习
2007-02-13 02:05 992还是求50以内的素数,尽可能地用到本章更多的语法,看程序 E3 ...
相关推荐
具有更多安全性、版本控制、共享能力与其它相关元数据的中间语言(IL),是包在一个或多个DLL或可执行文件中的。 基于ILDASM检查程序集中的IL有时很有用,但它要求我们熟悉MSIL。通常,比起IL,大多数开发人员对像...
它还使用通用的通信协议,如传输控制协议/因特网协议(TCP/IP)和网络基本输入输出系统(NetBIOS),并且可以在这些环境提供分布式处理支持。例如,它可以根据请求的类型,服务请求从一个客户选择路由到一个特定的服务器...
3、使用NiceLabel标签设计软件和打印机驱动程序获得最大性能和对任何激光或喷墨打印机的控制。2500多种标签打印机的Windows标准驱动程序;标签打印机条形码、字体和其他功能的原生支持;经微软测试的卓越的Windows...
在基于VMware ESXi-6.5.0-4564106最后一版可被VMware vSphere Client6.0u3客户端访问及部分功能控制的iso上,加载了: net55-r8168 net51-r8169 net-igb sata-xahci 四种驱动,可直接下载安装。在x79-ss双路主板...
6、第一次访问论坛不再需要刷新一次才能访问; 7、支持跳过验证码配置(后台增加validateCodeEnabled一项,置成false即关闭验证码验证); 8、支持注册协议模板; 9、支持发送欢迎消息的模板; 8、完善了短消息提醒...
具有更多安全性、版本控制、共享能力与其它相关元数据的中间语言(IL),是包在一个或多个DLL或可执行文件中的。 基于ILDASM检查程序集中的IL有时很有用,但它要求我们熟悉MSIL。通常,比起IL,大多数开发人员对像...
具有更多安全性、版本控制、共享能力与其它相关元数据的中间语言(IL),是包在一个或多个DLL或可执行文件中的。 基于ILDASM检查程序集中的IL有时很有用,但它要求我们熟悉MSIL。通常,比起IL,大多数开发人员对像...
1.版本:matlab2014/2019a/2021a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab...##### 6.5 无人机通信中继优化 #####
1.版本:matlab2014/2019a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容...##### 6.5 无人机通信中继优化
7.3访问控制列表验证(show ip access-list ) 7.4查看路由表(show ip route) 7.5DHCP动态获取IP地址验证 7.6查看生成树(show spanning-tree) 7.7查看地址池 八、网络故障维护 九、成员分工 十、...
用JSP编写的WEB网页模板以及用MyEclipse6.5、Tomcat6.0S、QLServer2005 Struts2、Spring3.0、Hibernate3.3等技术编写的源代码。 整个项目采用MVC模式,应用Struts Spring Hibernate三个框架实现了一个小区管理系统...
设备网络SDK是基于设备私有网络通信协议开发的,为嵌入式网络硬盘录像机、NVR、网络摄像机、网络球机、视频服务器、解码器、报警主机、网络存储等产品服务的配套模块,用于远程访问和控制设备软件的二次开发。...
软件系统安全保障方案,包括目录结构和一些通用性的描述。目录结果: 安全保障方案 1 目 录 1 ...6.3 信息访问控制 8 6.4 系统日志与审计 8 6.5 数据完整性 8 7、 安全管理体系 8 8、 其他 9
分为View层(显示层)、Control层(控制层)、Service层(业务逻辑层)、DAO层(数据库访问对象层)。利用Spring的依赖注入和面向切面特性,hibernate的数据持久化技术、Struts的控制器实现了楼栋管理模块,房间管理...
此资源包含了用户需求说明文档、用JSP编写的WEB网页模板以及用MyEclipse6.5、Tomcat6.0S、QLServer2005 、Struts2、Spring3.0、Hibernate3.3等技术编写的源代码。 整个项目采用MVC模式,应用Struts Spring ...