Ruby中的public protected private的區別

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.方法名在類中被調用。ruby

2 在類方法中沒法調用實例方法測試

相關文章
相關標籤/搜索