Scala访问控制权限
-
默认访问权限:
- 描述:Scala中的默认访问权限相当于Java中的public。如果一个变量或方法没有任何修饰符,就代表默认访问权限。
- 作用域:全局,可以在任何地方访问。
-
protected访问权限:
- 描述:protected修饰符表示该属性或方法只能在当前类及其子类中访问。
- 作用域:当前类及其子类。
-
private访问权限:
- 描述:private修饰符表示该属性或方法只能在当前类内部访问。
- 作用域:当前类内部。
-
private[this]访问权限:
- 描述:private[this]修饰符表示该属性或方法只能在当前类内部访问,但不能通过子类访问。
- 作用域:当前类内部,不能通过子类访问。
示例代码
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 {// 可以访问protectedVarprintln(protectedVar)// 不能访问privateVar// println(privateVar) // 错误// 不能访问privateThisVar// println(privateThisVar) // 错误
}
扩展示例代码
class Student123 {// 1. 默认权限方法类似于Java中的publicval 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 = {// 可以访问受保护的属性carprintln(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的访问控制权限提供了灵活的访问控制机制,可以根据需要选择合适的访问权限,以保护类的内部状态和实现细节。通过合理使用这些访问权限,可以有效地控制代码的访问权限,提高代码的安全性和可维护性。在实际开发中,根据成员变量和方法的使用场景,选择适当的访问权限是非常重要的