访问权限

55 阅读1分钟

1·protected : 受保护的。它的特点有如下4个:

(1) 在类的内部可以访问。

(2) 在类的外部不能访问。

(3) 在伴生对象中可以访问。

(4) 在子类中可以访问

2·private:私有的

(1)在类的内部可以访问。

(2)在 类的外部不能访问。

(3) 在伴生对象中可以访问。

3·private[this]。更加严格的私有权限。

(1) 在类的内部可以访问。

(2) 在类的外部不能访问 private[this]。

(3) 在伴生对象不能访问 private[this]。

(4) 在子类中不能访问 private[this]。

/*
  访问权限控制
  1·公开的。不写修饰符
  2·protected,保护的
        在类的外部不能访问
        在子类中访问
  3·private.私有的
        在类的外部不能访问
        在子类不能访问
        在伴生对象中可以访问
   4·private [this]
        只能被当前对象使用
        在类的内部使用
 */
object w49 {
  object Person {
    def test(p:Person): Unit={
      //private 在伴生对象中可以访问
      println(p.password)
      //private[this]在伴生对象中不能访问
      //println(p.money)
    }
  }
  class Person() {
    var name: String = "xx"; // 公开的
    protected var birthday: String = "2000-10-10"
    private var password:String="123456"
    private [this] var money:Int =100
    def t():Unit ={
      println(money)
    }
  }

  class Son extends Person() {
    // 2. protected在子类中可访问
    println(birthday)
    //3·private在子类中不能访问
    //print(password)
  }

  def main(args: Array[String]): Unit = {
    val p1 = new Person()
    println(p1.name)
    // 2. protected在类的外部无法访问
    // println(p1.birthday)
    new Son()
    //3·在伴生对象中访问 类的私有成员
    Person.test(p1)
  }


}