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 在類方法中沒法調用實例方法測試