伴生

2 阅读1分钟
package level02

object class02 {
  /*
  * 伴生类 和 伴生对象
  * 1. 类和对象的名字是一样的
  * 2. 他们在同一个文件中
  *
  * 特点:可以访问对方的私有(private)属性
  */
}

class Student() {
  // private 修饰的属性,在类的外部(在当前的class之外)无法访问!
  private val name: String = "小花"
}

object Student {
  def sayHello(stu: Student): Unit = {
    // 在伴生对象中,访问伴生类的私有属性!
    println(s"${stu.name}")
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val stu1 = new Student()
    // stu1.name 是错误的,无法访问
    Student.sayHello(stu1)
  }
}

伴生类和伴生对象的关键点:

  • 伴生类和伴生对象必须同名且在同一个文件中
  • 伴生对象可以访问伴生类的私有成员
  • 普通的外部代码无法直接访问类的私有成员(如 stu1.name 会报错)
  • 通过伴生对象的方法可以间接访问这些私有成员

运行这个修正后的代码,会输出:小花