scala的访问权限

43 阅读3分钟

Scala的访问权限概述

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

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

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

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

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

(4)private[this]访问权限

private访问权限

private : 私有的。它的特点有如下三个。 (1) 在类的内部可以访问。 (2) 在类的外部不能访问。 (3) 在伴生对象中可以访问。

    package t2

    /*
    访问权限控制
    1.默认访问权限
    2.使用protected(被保护的)修饰符
      (1)在类的外部,不能直接通过对象.属性的方式来访问
      (2)在子类中,通过super 来访问protected的方法
    3.protected
     */

    object test24 {
      //name属性具有默认的访问权限
      class Father() {
        var name:String="小花"

        protected var  gender:String="女"
        protected def test():Unit={
          println("test")
        }

        private val age:String="18"
        private def test1():Unit={
          println("test1")
        }
      }
      //在子类中,我们通过super来访问父类
      class Son extends Father{
        //protected 修饰的成员,可以在子类中访问
        super.test()
        println(gender)
        //private 修饰的成员,在子类中不可访问
    //    super.test1()
    //    println(age)
      }

      def main(args: Array[String]): Unit = {

        var son1=new Son()
      }
    }

protected访问权限

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

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

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

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

private[this] 控制方法作用域

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

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

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

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

    package t2

    /*
    访问权限控制
    1.默认访问权限
    2.使用protected(被保护的)修饰符
      (1)在类的外部,不能直接通过对象.属性的方式来访问
      (2)在子类中,通过super 来访问protected的方法
    3.protected(私有的)
      (1)在子类中,无法访问
      (2)在伴生对象,伴生类中可以访问

     */

    object test25 {
      //name属性具有默认的访问权限
      class Student() {
        private var age: Int = 18
      }
        object Student {
          def test(student: Student):Unit={
            println(student.age)
        }

        }


      def main(args: Array[String]): Unit = {
        val stu=new Student()
        //private 成员,不能在类的外部,通过对象.属性的方法来访问
        //报错:stu.age
        Student.test(stu)
      }
    }

image.png

    package t2

    /*
    访问权限控制
    1.默认访问权限
    2.使用protected(被保护的)修饰符
      (1)在类的外部,不能直接通过对象.属性的方式来访问
      (2)在子类中,通过super 来访问protected的方法
    3.protected(私有的)
      (1)在子类中,无法访问
      (2)在伴生对象,伴生类中可以访问
    4.private[this]私有,只能在当前的类中访问。
      子类无法访问,伴生对象、伴生类中不可以访问
     */

    object test25 {
      //name属性具有默认的访问权限
      class Student() {
        private var age: Int = 18

        private [this] var secret:String="xx日,xxx事"

        def test():Unit={
          //if(){}
          println(secret)
        }
      }
        object Student {
          def test(student: Student):Unit={
            //在伴生对象中,可以通过对象.属性的方法来访问
            println(student.age)
            //private[this]只能在当前的类中访问
        }

        }


      def main(args: Array[String]): Unit = {
        val stu=new Student()
        //private 成员,不能在类的外部,通过对象.属性的方法来访问
        //报错:stu.age
        Student.test(stu)
      }
    }