Ruby中类的进阶(继承,private, public, protect)
类中的public,protect,private
public method
class Point
def test
end
end
这样定义的test方法就是一个public方法可以在类内外使用
protected method
protected
protected 权限的函数只能在被本类或子类的上下文中调用,单可以使用other_object.function的形式。这个关键是可以调用本类的其他对象的protected函数
class Point
def test
end
protected :test
end
或者
class Point
protected
def test
end
end
实例:
# Now make 'test' protect
class B
protected :test_access
end
p A.new.test_access # 错误 private method 'test_access'
B.new.test # test access right
p B.new.test_other(B.new) # test access right
p B.new.test_other(A.new) # 错误 private method 'test_access'
只要在protected关键词之后那么就是protected
private
只能在本对象的实例中访问本对象的private方法,Ruby中private意为不能指定方法接收者,接收者只能是self,且self必须省略;
private权限的函数只能在本对象成员函数中访问到。也就是这个函数只是对这个对象的实现细节。
class A
private
def test_access
@instance_attribute = "instance_attribute"
return "test access right"
end
end
class B < A
def test
puts test_access
puts @instance_attribute
end
def test_other(a)
a.test.access
end
end
-------------------------
B.new.test # => test access right
# = > instance_attribute
A.new.test_access #错误test.rb:20: private method `test_access' called for #<A:0x3fd9064> (NoMethodError)
B.new.test_other(A.new) #错误test.rb:18: in `test_other': private method `test_access' called for #<A:0x4198850> (NoMethodError) from test.rb:24
基本继承
直接进入主题吧,我们先定义一个类
class Point
def initialize(x, y)
# @x instance variable
# @@x class variable
# $x global variable
# x local variable
@x, @y = x, y
end
def first_quadrant?
x > 0 && y >0
end
end
这里我们创建一个新的类继承原来的类
class Point3D << Point
def initialize(x, y, z)
@x, @y, @z = x, y, z
end
end
但是我们可以使用super方法
class Point3D << Point
def initialize(x, y, z)
super(x, y)
@z = z
end
end
继承了父类中的方法,不用写重复的代码了
Ruby中类的进阶(继承,private, public, protect)的更多相关文章
- c++三种继承方式public,protect,private
C++中的三种继承public,protected,private 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员 ...
- public protect private. 草稿。
public protect private. 草稿. #include <iostream> #include <thread> #include <memory> ...
- Java中public、private、protect对数据成员或成员函数的访问限制
Java类中对数据成员.成员函数的访问限制修饰有:public.protect.private.friendly(包访问限制) public修饰的数据成员或成员函数是对所有用户开放的,所有用户可以直接 ...
- C++:private继承与public继承
1 private, public, protected 访问标号的访问范围 private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protecte ...
- java中public与private还有protect的区别
java中public与private还有protect的区别 总是忘记.
- c++继承详解:共有(public)继承,私有继承(private)继承,保护(protected)继承
公有继承(public)继承.私有继承(private).保护继承(protected)是常用的三种继承方式. 1.公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时 ...
- public,protect,private访问权限
第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问.不能被任何其他访问,该类的对象也不能访问. protect ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- C++ private,public,protected 关键字
第一: private,public,protected的访问范围: private: 只能由该类中的函数.其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被 ...
随机推荐
- VS2015配置Entity Framework Power Tools Bate4,还有一些使用与注意的地方
今天使用vs2015重新安装了这个名为Entity Framework Power Tools的插件,由于它只支持到2013,因此需要进行一些操作方能使用 下面是一些参考文档 http://www.c ...
- 错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息
错误: 安装必备组件失败: 安装必备组件失败: SqlInstanceRtc 有关详细信息 查看错误得知是安装sqlexpr_x64.exe的时候出现了错误 解决: 通过打开skype镜像,找到sql ...
- Oracle修改表名的几种方式
因为原来所在表不想被删除,但又需要新建立一个相同表名的表,故先把原来的表的表名更改为另一个临时表名. 查看当前用户下所有的表 select tname from tab where tabtype= ...
- VS2010 调试启动特别慢
调试选项里有 _NT_SYMBOL_PATH 这一项,并且不能取消选择.只好删除这个环境变量,此来源于windbg环境中需要.重启windows后,VS2010调试里已没有此项,F5调试飞快--
- posix进程间的通信
1.无名管道 1.1管道是Linux支持的最初Unix IPC形式之一,具有以下特点: 管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道: 只能用于父子进程或者兄弟进程之间( ...
- 在WAS下找不到主机名称的问题
发生错误: 联合 ADMU0036E: Deployment Manager 不能根据名称主机 cdzfwas2 在地址 127.0.0.1 查找 期间发生错误:正在回滚到原始配置 ...
- 几个python练习题
从python公众号里面看到了几道python的练习题,就拿来练练手,结果上手了发现自己还是特别水,不是很难的8道题,我只做出来5道,其中还3道题卡住了,边查边做的.原题链接在这里:http://py ...
- git branch 进入编辑状态
命令行输入git branch,发现进入编辑状态,都要:wq,非常不方便,这样配置 git config --global core.pager ''
- js 实现加入收藏/加入首页功能
加入收藏夹实现: html代码如下: <a href="javascript:;" onclick="AddFavorite(window.location.hre ...
- 使用SuperMap Deskpro 6R.NET生成地图缓存
使用说明 “地图缓存”按钮,用来对二维地图数据生成缓存文件,优化地图的浏览效果. 操作步骤 1.单击功能区>“数据”选项卡>“生成缓存”组中的“地图缓存”按钮. 2.弹出如下所示“生成地图 ...