scala中的访问权限

3 阅读2分钟

Scala的访问权限概述

Scala中的属性、方法可以通过访问控制符来设置不同的访问权限。不同的访问控制符可以决定是否可以被外部类访问。

有四种访问控制权限,分别为:

(1)默认访问权限。Scala中的默认访问权限相当于Java中的public,Scala中如果一个变量没有任何修饰符,就代表默认访问权限。作用域:全部

(2)protected访问权限。作用域:本类,子类

(3)private访问权限。作用域:类内部(伴生对象:定义方法传入类的对象)

(4)private[this]访问权限。

private 访问权限

private : 私有的。它的特点有如下三个。

(1) 在类的内部可以访问

(2) 在类的外部不能访问。

(3) 在伴生对象中可以访问。

protected 访问权限

protected : 受保护的。它的特点有如下4个:

(1) 在类的内部可以访问。

(2) 在类的外部不能访问。

(3) 在伴生对象中可以访问。

(4) 在子类中可以访问,与之对应的是:private修饰的,在子类中无法访问

private[this]控制方法作用域

private [this] : 更加严格的私有权限。这个属性(方法)只能在调用它的同一个实例内使用。它的特点如下:

(1) 在类的内部可以访问。

(2) 在类的外部不能访问 private[this]。

(3) 在伴生对象不能访问 private[this]。

(4) 在子类中不能访问 private[this]。

更加严格的私有权限,表示该字段或方法只能在调用它的同一个实例内部可见。这意味着即使在同一类的其他实例中,也无法访问该字段或方法。不能在伴生对象中访问,不能在函数参数中访问。   
package txy

object Demo19 {
  object shenchong {
    def test(p:shenchong): Unit = {
      println(p.passworld)
    }
  }
  class shenchong() {
    val name = "沈冲"
    val age = 19
    protected val iq: Int = 60
    //protected:只能在内部与子类中访问,外部无法访问
    private val passworld: Int = 123456
    //private:只能在内部与伴生对象中访问,在外部与子类都无法访问
    private[this] val browser = "https://www.9527.com"
    //private[this]:只能在类的内部使用,最高级
    def sc2(): Unit = {
      println(browser)
    }
  }
  class sc extends shenchong{
    println(iq)
  }
  def main(args: Array[String]): Unit = {
    val sc = new shenchong()
    println(sc.age)
    println(sc.name)
    val sc1 = new sc
    
  }
}