30_访问权限

Java中权限修饰符
* public、private、protected和默认
*
Scala中的权限修饰符
* 默认、private、private[包名]、protected
* 说明
* 默认
* scala中的默认的访问权限为public,但是scala中没有public关键字
* 权限说明 公共属性、公共类,不受权限控制
* private
* 修饰类
* 只能被同包(包含递归子包)访问
* 修饰成员
* 只能在类的内部和伴生对象中使用
* private[包名]
* 修饰类
* 只能被同包(包含递归子包)访问 + 被指定的(父类)包内
* 修饰成员
* 只能在类的内部和伴生对象中使用 + 被指定的(父类)包内
* 注意事项
* private 修饰后 只能向下访问,如果需要向*问,需要指定private[父类包名]
* 同级包内的private类是无法访问的
* 示例 com.dxm.apackage 、com.dxm.bpackage
* apackage、bpackage 内的私有类无法互相访问
* protected
* 修饰成员
* 只能在同类(伴生对象)、子类中访问
* java中的protected,同类子类 + 同包类中可访问
*
* */
package com.dawang.scala.面向对象


/**
  * @author gaocun
  * @create 2021-10-21 7:44 PM */
object 访问权限_04 {
  /*
  * Java中权限修饰符
  *     public、private、protected和默认
  *
  * Scala中的权限修饰符
  *     默认、private、private[包名]、protected
  *     说明
  *        默认
  *            scala中的默认的访问权限为public,但是scala中没有public关键字
  *            权限说明 公共属性、公共类,不受权限控制
  *        private
  *            修饰类
  *                 只能被同包(包含递归子包)访问
  *            修饰成员
  *                 只能在类的内部和伴生对象中使用
  *         private[包名]
  *            修饰类
  *                 只能被同包(包含递归子包)访问 + 被指定的(父类)包内
  *            修饰成员
  *                 只能在类的内部和伴生对象中使用 + 被指定的(父类)包内
  *            注意事项
  *                 private 修饰后 只能向下访问,如果需要向*问,需要指定private[父类包名]
  *                 同级包内的private类是无法访问的
  *                   示例 com.dxm.apackage 、com.dxm.bpackage
  *                   apackage、bpackage 内的私有类无法互相访问
  *         protected
  *            修饰成员
  *                 只能在同类(伴生对象)、子类中访问
  *                 java中的protected,同类子类 + 同包类中可访问
  *
  * */
}


package Packtwo {

  package PackOne {

    // 公共类
    class PublicClass {
      var name = "这是公共类"
      private var flag = "这是公共类的私有属性"
      private[PackOne] var flagPack = "这是公共类的私有[包]属性"
    }

    // 私有类
    private class PrivateClass {
      var name = "这是私有类"
    }

    // 私有类 + 指定包名
    private[Packtwo] class PrivatePackClass {
      var name = "这是private[包]私有类"
    }

    // 测试 protected 修饰成员
    class ProtectedClassFu {
      protected var name = "这是ProtectedClassFu类"
    }

    class ProtectedClassZi extends ProtectedClassFu {
       def show = println(  name)
    }

    // 测试对象
    object test {
      def main(args: Array[String]): Unit = {
        println("同包内访问私有类 - ", new PrivateClass().name)
        println("同包内访问私有类 - ", new PrivatePackClass().name)
        //println("同包内公共类私有属性 - ",new PublicClass().flag)
        //Symbol flag is inaccessible from this place
        println("同包内公共类私有[包]属性 - ", new PublicClass().flagPack)
        //println("ProtectedClassFu-name:",new ProtectedClassFu().name)
        new ProtectedClassZi().show
      }
    }


  }


  import PackOne.{PrivateClass, PrivatePackClass}

  // 测试对象
  object test {
    def main(args: Array[String]): Unit = {
      //println("不同包内访问私有类 - ", new PrivateClass().name)
      //Symbol PrivateClass is inaccessible from this place
      println("同包内访问私有类 - ", new PrivatePackClass().name)

    }
  }

}

 

上一篇:git常用命令及异常


下一篇:11.11