Scala伴生类和伴生对象

55 阅读2分钟

1.伴生类和伴生对象

  1. 伴生类(class Student :定义了一个名为Student的类,其中包含一个私有属性name(值为 "小花")。在 Scala 中,被private修饰的成员(属性或方法)通常只能在当前类内部访问,类外部无法直接获取。
  2. 伴生对象(object Student :定义了一个与类同名的单例对象Student,其中包含一个方法sayHallo,参数为Student类的实例stu。由于它与class Student同名且在同一文件中,因此被称为Student类的 “伴生对象”。 主方法(main :程序的入口,创建Student类的实例stu1,并调用伴生对象StudentsayHallo方法,传入stu1作为参数。

2. 特性:伴生关系的特殊访问权限

  • 伴生类和伴生对象的关键特性是:它们可以互相访问对方的私有成员(包括私有属性和私有方法)。
  • 伴生对象StudentsayHallo方法中,直接访问了伴生类Student的私有属性stu.name,这在普通类与对象的关系中是不允许的,但在伴生关系中是合法的

3. 运行结果

当程序执行时,main方法调用Student.sayHallo(stu1),伴生对象会获取到stu1的私有属性name("小花"),最终输出

下面为整体代码
/**
 * 伴生类 和 伴生对象
 * 1.类和对象的名字是一样的
 * 2.他们在同一个文件

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

}

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

}

def main(args:Array[String]): Unit = {
  val stu1 = new Student()
  Student.sayHallo(stu1)

}

总结

Scala 的伴生类与伴生对象机制,解决了 “私有成员跨类访问” 的需求,同时保持了封装性。通常,伴生类用于定义实例相关的属性和方法,伴生对象用于定义静态相关的方法,两者配合使用,是 Scala 中面向对象编程的重要特性。