📅  最后修改于: 2023-12-03 15:05:04.830000             🧑  作者: Mango
访问修饰符在 Scala 中被用于限制最终用户可以访问的类、对象、变量和方法。Scala 中有四种访问修饰符:private
、protected
、public
、private[this]
。
private
访问修饰符private
修饰符使成员只能在包含该成员定义的类中进行访问。即,在哪个类或对象中定义了该成员,就只能在该类或对象的范围内访问该成员。
以下是一个示例:
class Person {
private var name: String = "Alice"
def printName(): Unit = {
println(name)
}
}
object Main {
def main(args: Array[String]): Unit = {
val person = new Person()
// 编译器报错,因为 name 是私有的
println(person.name)
// 正确,因为 printName() 可以访问 name
person.printName()
}
}
protected
访问修饰符protected
修饰符用于将成员的访问限制在类的定义和派生类中。即,只有定义该成员的类和继承该成员的类可以访问该成员。
以下是一个示例:
class Person {
protected var age: Int = 20
def printAge(): Unit = {
println(age)
}
}
class Student extends Person {
def updateAge(newAge: Int): Unit = {
// 正确,因为 age 是受保护的
age = newAge
}
}
object Main {
def main(args: Array[String]): Unit = {
val student = new Student()
// 编译器报错,因为 age 是受保护的
println(student.age)
// 正确,因为 printAge() 可以访问 age
student.printAge()
}
}
public
访问修饰符Scala 中,成员默认是 public
访问修饰符。因此,任何地方都可以访问该成员。
以下是一个示例:
class Person {
var name: String = "Alice"
def printName(): Unit = {
println(name)
}
}
object Main {
def main(args: Array[String]): Unit = {
val person = new Person()
// 正确,因为 name 是公共的
println(person.name)
// 正确,因为 printName() 可以访问 name
person.printName()
}
}
private[this]
访问修饰符private[this]
访问修饰符只能在对象中使用。它将成员限制为只能由该对象访问。即,不同的对象不能访问彼此的 private[this]
成员。
以下是一个示例:
class Person {
private[this] var age: Int = 20
def updateAge(newAge: Int): Unit = {
// 正确,因为 age 是该对象私有的
age = newAge
}
}
object Main {
def main(args: Array[String]): Unit = {
val person1 = new Person()
val person2 = new Person()
// 编译器报错,因为 age 是私有的
person1.age = 30
// 正确,因为 updateAge() 可以访问 age
person1.updateAge(30)
// 编译器报错,因为 age 是私有的
person2.updateAge(30)
}
}
在 Scala 中使用访问修饰符非常重要,因为它们可以帮助开发人员保护其代码中的敏感信息,同时还可以提供更好的代码组织和可读性。