自学内容网 自学内容网

Scala访问控制权限详解与应用实践 #Scala #scala

Scala访问控制权限

  1. 默认访问权限

    • 描述:Scala中的默认访问权限相当于Java中的public。如果一个变量或方法没有任何修饰符,就代表默认访问权限。
    • 作用域:全局,可以在任何地方访问。
  2. protected访问权限

    • 描述:protected修饰符表示该属性或方法只能在当前类及其子类中访问。
    • 作用域:当前类及其子类。
  3. private访问权限

    • 描述:private修饰符表示该属性或方法只能在当前类内部访问。
    • 作用域:当前类内部。
  4. private[this]访问权限

    • 描述:private[this]修饰符表示该属性或方法只能在当前类内部访问,但不能通过子类访问。
    • 作用域:当前类内部,不能通过子类访问。

示例代码

 

scala

class MyClass {
  // 默认访问权限
  var defaultVar: Int = 10
  // protected访问权限
  protected var protectedVar: Int = 20
  // private访问权限
  private var privateVar: Int = 30
  // private[this]访问权限
  private[this] var privateThisVar: Int = 40
}

class SubClass extends MyClass {
  // 可以访问protectedVar
  println(protectedVar)
  // 不能访问privateVar
  // println(privateVar) // 错误
  // 不能访问privateThisVar
  // println(privateThisVar) // 错误
}

扩展示例代码

 

scala

class Student123 {
  // 1. 默认权限方法类似于Java中的public
  val name: String = "小花"

  // 2. 私有属性。 类的内部。 不能继承
  private val score: Int = 59

  // 3. 受保护的。可以继承
  protected val car: String = "baxputluk halidam"

  def say(): Unit = {
    println(s"Name: $name, Score: $score, Car: $car")
  }
}

object Student123 {
  def run(obj: Student123): Unit = {
    // 由于是伴生对象,可以直接访问类中的所有成员,包括私有成员
    println(s"Name: ${obj.name}, Score: ${obj.score}, Car: ${obj.car}")
  }
}

// 子类
class SubStudent extends Student123 {
  def test(): Unit = {
    // 可以访问受保护的属性car
    println(s"Name: ${this.name}, Car: ${this.car}")
    // 尝试访问私有属性score将导致编译错误
    // println(this.score) // 错误
  }
}

object Test22_01 {
  def main(args: Array[String]): Unit = {
    val s = new Student123()
    val s1 = new SubStudent()
    s.say()
    Student123.run(s)
    s1.test()
  }
}

总结

Scala的访问控制权限提供了灵活的访问控制机制,可以根据需要选择合适的访问权限,以保护类的内部状态和实现细节。通过合理使用这些访问权限,可以有效地控制代码的访问权限,提高代码的安全性和可维护性。在实际开发中,根据成员变量和方法的使用场景,选择适当的访问权限是非常重要的


原文地址:https://blog.csdn.net/a1199a/article/details/143485145

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!