📜  Scala-访问修饰符(1)

📅  最后修改于: 2023-12-03 15:05:04.830000             🧑  作者: Mango

Scala-访问修饰符

访问修饰符在 Scala 中被用于限制最终用户可以访问的类、对象、变量和方法。Scala 中有四种访问修饰符:privateprotectedpublicprivate[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 中使用访问修饰符非常重要,因为它们可以帮助开发人员保护其代码中的敏感信息,同时还可以提供更好的代码组织和可读性。