Ruby中访问控制符public,private,protected区别总结
重点关注private与protected
public
默认即为public,全局都可以访问,这个不解释
private
C++, “private” 意为 “private to this class”, 但是Ruby中意为 “private to this instance”.
意思是:C++中,对于类A,只要能访问类A,就能访问A的对象的private方法。
Ruby中,却不行:你只能在你本对象的实例中访问本对象的private方法。
因为Ruby的原则是“private意为你不能指定方法接收者”,接收者只能是self,且self必须省略!
所以Ruby中子类可以访问父类的private方法。但self.private_method是错的。
protected
可以在本类或子类中访问,不能在其它类中访问。
测试代码(public均可访问,代码略)
class A
def test
protected_mth
private_mth self.protected_mth
#self.private_mth #wrong obj = B.new
obj.protected_mth
#obj.private_mth #wrong
end protected
def protected_mth
puts "#{self.class}-protected"
end private
def private_mth
puts "#{self.class}-private"
end
end class B < A
def test
protected_mth
private_mth self.protected_mth
#self.private_mth #wrong obj = B.new
obj.protected_mth
#obj.private_mth #wrong
end
end class C
def test
a = A.new
#a.protected_mth #wrong
#a.private_mth #wrong
end
end A.new.test
B.new.test
C.new.test
注:ruby的访问控制不同于java,没有包的区别。
其它包中的类只要引用目标类,和目标类同包下类访问控制规则相同。
参考:http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes#Declaring_Visibility
Ruby中访问控制符public,private,protected区别总结的更多相关文章
- PHP中const,static,public,private,protected的区别
原文地址:http://small.aiweimeng.top/index.php/archives/54.html const: 定义常量,一般定义后不可改变static: 静态,类名可以访问pub ...
- 访问权限,public private protected
百度经验这篇文章很不错:https://jingyan.baidu.com/article/bad08e1e8e9a9b09c851219f.html
- 访问权限系列一(public/private/protected/default):成员变量
通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...
- Java中public,private,protected,和默认的区别
Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...
- php class中public,private,protected的区别,以及实例
一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...
- public private protected和默认的区别(转自百度)
public private protected和默认的区别 Java中对类以及类中的成员变量和成员方法通过访问控制符(access specifier)进行区分控制.刚学Java语言的同学可能对pu ...
- public/private/protected访问控制权限的区别
//public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- public,private,protected的区别
一,public,private,protected的区别public:权限是最大的,可以内部调用,实例调用等.protected: 受保护类型,用于本类和继承类调用.private: 私有类型,只有 ...
随机推荐
- NFS资料
Linux NFS服务器的安装与配置 http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html Linux NFS服务器的安装与配 ...
- USB相关资料
http://www.usb.org/developers/defined_class/#BaseClass00h http://blog.csdn.net/lizzywu/article/detai ...
- Spring入门第十一课
IOC容器中Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过 ...
- 附近wifi都是你的
今天给大家介绍deauth攻击. 最终效果:附近你指定的任何wifi,别人都无法连接,即便连接上的也会断掉. 由于我在 “世界虽大,但没有破不了的wifi” 这篇文章中写的很详细,所以我在这里就步详 ...
- Automake使用(初级)
工程地址 https://github.com/silvermagic/automakeDev.git 最初工程目录结构 $ vim main.cpp $ vim src/main.cpp ls -l ...
- 315. Count of Smaller Numbers After Self(Fenwick Tree)
You are given an integer array nums and you have to return a new counts array. The counts array has ...
- css 实现垂直水平居中常用方法
html <div class="outer"> <div class="inner"></div> </div> ...
- CC38:第k个数
题目 有一些数的素因子只有3.5.7,请设计一个算法,找出其中的第k个数. 给定一个数int k,请返回第k个数.保证k小于等于100. 测试样例: 3 返回:7 解法 主要就是在于isPrime这个 ...
- Js 文件上传后缀验证
//img格式验证 function imgFormat(name) { //再对文件名进行截取,以取得后缀名 var namearr= name.split("."); //获取 ...
- Codeforces 140B(模拟)
要点 题意读好久.大概这样理解:每个时间点按顺序收到序号1-n的卡片,只有收过的卡片才能发给别人并且主人公会发在他心中优先级最高的.由于主人公可以在任何时间给朋友发卡片,最后输出(说得很绕但等价于)1 ...