当前位置: 首页 > article >正文

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


http://www.kler.cn/a/384253.html

相关文章:

  • 一种高度集成的数字化管理平台:城市管理综合执法系统(源码)
  • 使用代理时Stable Diffusion无法正常下载各类模型的解决办法
  • SQL server增删改查语句和实例
  • Maven 下载配置 详解 我的学习笔记
  • 第8章 利用CSS制作导航菜单作业
  • 基于Zynq FPGA的雷龙SD NAND存储芯片性能测试
  • 履带机器人(一、STM32控制部分--标准库)
  • MyBatis项目的创建和增删查改操作
  • 计算机的发展史
  • 动漫风格大模型和lora推荐
  • 【ShuQiHere】️使用 Tailscale 轻松构建安全、分布式网络
  • 51单片机教程(一)- 开发环境搭建
  • group_concat配置影响程序出bug
  • 前端预览word、excel、ppt
  • 使用onnxruntime c++ API实现yolov5m视频检测
  • 进入半导体行业需要具备哪些能力?
  • Scala的List
  • 计算机体系结构知识(一)
  • 前端零基础学习Day-Six
  • MySQL 导出数据
  • 鸿蒙多线程开发——并发模型对比(Actor与内存共享)
  • qt QTextDocument详解
  • 56合并区间 go解题
  • 【经验分享】六西格玛管理培训适合哪些人参加?
  • docker 拉取MySQL8.0镜像以及安装
  • C#笔记(4)