ruby中的访问权限

=begin
在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象的方法。
控制了对方法的访问,也就控制了对对象属性的访问。
控制对方法的访问,有三种方式: 
 访问控制                                          意义
public       可以被任何实例对象调用,不存在访问控制;
protected    可以被定义它的类和其子类访问,可以在类中或子类中指定给实例对象;
private      可以被定义它的类和其子类访问,不能被实例对象调用。
方法默认都是公有的(initialize方法除外,它永远是私有的)。
=end
class Person
  def talk
    puts "public :talk,将调用speak"
    speak
  end
  def speak
    puts "protected :speak,将调用laugh"
    laugh
  end
  def laugh
    puts "private:laugh"
  end
  protected :speak
  private :laugh
end
p1=Person.new
p1.talk
#p1.speak  实例对象不能访问protected方法
#p1.laugh  实例对象不能访问private方法
puts "-----------------------------------------------------"
class Person
  def speak
    "protected:speak"
  end
  def laugh
    "private:laugh"
  end
  protected :speak
  private :laugh
end
class Student < Person
  def useLaugh
    puts laugh
  end
  def useSpeak
    puts speak
  end
end
p2=Student.new
p2.useLaugh  # private:laugh
p2.useSpeak  # protected:speak
puts "----------------------------------------------------"
class Person
  def speak
    "protected:speak "
  end
  def laugh
    "private:laugh"
  end
  protected :speak
  private :laugh
  def useLaugh(another)
    puts another.laugh #这里错误,私有方法不能指定对象
  end
  def useSpeak(another)
    puts another.speak
  end
end
p1=Person.new
p2=Person.new
p2.useSpeak(p1)  # protected:speak
#p2.useLaugh(p1)
=begin
 从上面三个程序可以得出结论:
public方法,可以被定义它的类和其子类访问,可以被类和子类的实例对
象调用;
protected方法,可以被定义它的类和其子类访问,不能被类和子类的实例
对象直接调用,但是可以在类和子类中指定给实例对象;
private方法,
可以被定义它的类和其子类访问,私有方法不能指定对象。
=end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值