Scala权限

本文介绍了Scala中的权限控制,包括理解package、Class的概念,详细讲解了object-private、private、protected和public四种权限的区别和用法,并探讨了作用域保护的规则及其应用场景。
摘要由CSDN通过智能技术生成

Scala权限

前提

理解权限的关键在于理解package的定义.

理解package

在Scala中,package必须定义在最上面的一行,用来说明该文件中的内容属于那个包,如果没有显示说明,则属于编译放置后的一级目录下. 按照以往开发的规则,包的名字代表了目录的层级的关系. 但是会有意外的情况,把某些不属于该目录层级关系下的文件放入,但是最后编译的时候会按照package为准,而不是放置源文件的目录层级关系.

理解Class

Class要具体位于某个package中,有两种表达方式. 第一种是将package定义在文件第一行,标明该文件的所有内容都属于该package. 第二种是限定package{} ,在{}里面定义的所有东西都属于该package.

两种方式可以一起使用

package test1

// ⚠️ test2 包在test1包下.
package test2 {
}

object-private权限

Scala中object-private权限是private[this],表示只允许在该实例内部使用,不允许其他任何对象访问.

class ClassOne {
  private[this] def say(): Unit = {
  }

  def say(co : ClassOne) = {
    // 编译不通过,因为say方法,只允许在该实例内部自己访问,而不允许其他对象访问.
    co.say()
  }
}

private权限

Scala中private权限是最小的权限,指定该权限的成员,只允许该类和伴生对象访问.

class ClassOne {
  private def sayHello() : Unit  = {
    println("Hello")
  }
  
  def sayWorld() : Unit = {
    // 可以编译,并且正常访问
    sayHello()
    println("World")
  }
}

class ClassTwo {
  // 编译不通过,不能访问sayHelo方法.
  def run(cl : ClassOne) : Unit = {
    cl.sayHello()
  }
}

protected权限

Scala中protected权限,包含private权限外,还允许继承的类访问受保护的成员. 在Java中,还额外允许同一包中的其他类访问.

class ClassOne {
  protected def sayHello() : Unit = {
    println("Hello")
  }
}

class ClassTwo extends ClassOne {
  def run(cl : ClassOne): Unit = {
    // 编译通过,因为ClassTwo继承了ClassOne,有权限访问ClassOne
    cl.sayHello()
  }
}

class ClassThree {
  def run(cl : ClassOne) : Unit = {
    // 编译不通过
    cl.sayHello()
  }
}

public权限

Scala中public权限,可以让任何地方的成员和类访问.

作用域保护

语法: private[X]或protected[X], X可以是包,类或者单例对象. 作用域保护是对指定范围内可见,而对其他范围是private或protected. 而不是对指定范围的权限是private或protected.

指定包的范围时,包只能是对其现在可见的. 如果指定非可见包,则会出现错误.

package com.basic {
  object test {
    def main(args: Array[String]): Unit = {
      val ot = new ObjectTest()
      ot.sayHello()
    }
  }
}

package com.user {
  class ObjectTest {
    // 不允许指定为basic,因为basic在此不可见.
    private[basic] def sayHello() : Unit = {
      println("Hello")
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值