文档章节

Ruby中的public protected private的区别

穿山
 穿山
发布于 2017/11/07 19:41
字数 394
阅读 14
收藏 0
class Student
  Version = 2
  @@student_counts = 0
  attr_accessor :name, :no, :sex
  def initialize(name,no,sex)
    @name = name
    @no = no
    @sex = sex
  end
  #类方法中无法调用实例方法
  def self.clazz_fun
    puts "这是一个类方法"
    pub_fun_first
  end

  class << self
    def clazz_fun_2
      puts "这是类方法的第二种写法"
    end

    def clazz_fun_3
      puts "这是类方法的第二种写法2"
    end
  end

  def pub_fun
    puts "这是一个公共方法#{@name},#{self.no},#{@sex}"
    pro_fun
    puts "在公共方法中可以调用protected方法"
    pri_fun
    puts "在公共方法中可以调用privated方法"
  end

  public :pub_fun#先方法再修饰以为ruby是从上到下执行的

  def pro_fun
    puts "这是一个受保护的方法"
  end

  protected :pro_fun

  def pri_fun
    puts "这是一个私有的方法"
  end

  private :pri_fun

end
Student.clazz_fun
s = Student.new("young", 24, "汉字")
s.pub_fun

#protected和private区别在于在类中public是可以被类调用而privated则不行
class Student
  def test
    self.pro_fun
    self.pub_fun
    # self.pri_fun
  end
end

s.test

#测试继承类
class MiddleStudent < Student
  def sub_fun
    pub_fun
    pro_fun
    pri_fun
    self.pub_fun
    self.pro_fun
    # self.pri_fun
  end
end
MiddleStudent.clazz_fun
ms = MiddleStudent.new("yooy", 10, "菇凉")
ms.sub_fun

 

 

1 public方法以实例方法的形式向外部公开该方法,就是public可以被实例直接调用,protected在同一个类中时可将该方法作为实例方法调用,privated方法在指定接收者的情况下不能调用该方法(只能使用缺省接收者的方式调用该方法,因此无法从实例的外部访问)也就是说在类中privated方法不能使用self.方法名在类中被调用。

2 在类方法中无法调用实例方法

 

© 著作权归作者所有

穿山
粉丝 9
博文 33
码字总数 18655
作品 0
南京
私信 提问
java public、private、protected

基于Java protected的深入理解:http://www.jb51.net/article/37879.htm Java中的private、protected、public和default的区别:http://my.oschina.net/u/1169535/blog/403589 Java中 public......

智能小松鼠
2015/09/29
33
0
c++三种继承方式讲解

c++三种继承方式讲解 #include"stdafx.h" #include //类内可访问protected与private,对于类内而言,他们两者没区别 using namespace std; class a1 { private: int a = 1; protected:int b ......

qq1753942680的博客
2017/12/22
0
0
ruby on rails错误undefined method `title' for nil:NilClass

原文 http://blog.csdn.net/liu_chunhui/article/details/37928015 主题 Ruby on Rails 首先搞清楚这句话,在 Ruby 中,方法分为 public 、 private 和 protected 三种,只有 public 方法才能...

wrxeoi
2016/04/14
6
0
java中private、protected、public和default 区别

java中private、protected、public和default 区别 在java中我们使用private、protected、public和default来控制类中属性和函数的访问: 类内部 本包 子类 外部包 public √ √ √ √ protec...

精通吹水
2016/04/28
182
0
深入理解类的继承和访问控制

场景:父类某 public method 使用了 private 属性或方法,则子类继承此 public method 并调用时,其中的private 属性或方法会被替换成子类自己的么? <?phpclass Foo { private $name = "fo...

big_cat
2016/03/18
115
0

没有更多内容

加载失败,请刷新页面

加载更多

高级技术题整理

1. 为什么等待和通知是在 Object 类而不是 Thread 中声明的? 一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答这种棘手...

泉天下
7分钟前
1
0
Elasticsearch

1 、下载 下载地址:https://www.elastic.co/downloads/past-releases 2 、安装 elasticsearch无需安装,解压即用。 3.运行 进入elasticsearch/bin目录,可以看到下面的执行文件: 双击运行 ...

少年已不再年少
7分钟前
4
0
Spring Boot 2.X(七):Spring Cache 使用

Spring Cache 简介 在 Spring 3.1 中引入了多 Cache 的支持,在 spring-context 包中定义了org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 两个接口来统一不同......

朝雾轻寒
9分钟前
2
0
java路径问题

在Java中有几种常见获取文件路径的方法,此处演示下用法和效果。 测试项目目录结构如右图: 1、使用File类 File file = new File("");// Java项目中-->D:\WorkSoftware\Workspace\EclipseP...

随心の随缘
11分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部