1.伴生类和伴生对象
- 伴生类(
class Student) :定义了一个名为Student的类,其中包含一个私有属性name(值为 "小花")。在 Scala 中,被private修饰的成员(属性或方法)通常只能在当前类内部访问,类外部无法直接获取。 - 伴生对象(
object Student) :定义了一个与类同名的单例对象Student,其中包含一个方法sayHallo,参数为Student类的实例stu。由于它与class Student同名且在同一文件中,因此被称为Student类的 “伴生对象”。 主方法(main) :程序的入口,创建Student类的实例stu1,并调用伴生对象Student的sayHallo方法,传入stu1作为参数。
2. 特性:伴生关系的特殊访问权限
- 伴生类和伴生对象的关键特性是:它们可以互相访问对方的私有成员(包括私有属性和私有方法)。
- 伴生对象
Student的sayHallo方法中,直接访问了伴生类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 中面向对象编程的重要特性。