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 在类方法中无法调用实例方法