Scala的访问修饰符

之前在学习scala时做的笔记,希望能对大家有点帮助。

 

import java.io.Serializable

import com.dreamponline.scala_train._
import com.sun.istack.internal.NotNull
import org.scalatest.FreeSpec

import scala.annotation.elidable
import scala.beans.BeanProperty
import scala.collection.immutable.HashMap
import scala.collection.mutable
import scala.reflect.ClassTag

/**
  * 
  * xx  08/07/25 09:00
  */
class ControlProgrammer extends FreeSpec {

"访问修饰符" - {

  "私有(Private)成员 仅在包含了成员定义的类或对象内部可见" in {

    class Demo {
      private var sum = 0
      var avg = 0
    }

    new Demo().avg = 1 // 能访问
    // new Demo().sum = 1  // 私有成员无法访问


    // 类的私有构造方法
    class Demo1 private(val name: String, val age: Int) {
      def this(name: String) {
        this(name, 10)
        "辅助构造函数".show()
      }
    }
    //私有主构造方法不能直接用主构造方法实例化,只能通过辅助构造函数实例化
    new Demo1("test")

  }

  "保护(Protected)成员 在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。" +
    "而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问" in {

    class Demo {
      protected var sum = 0

      protected def method(): Unit = {}
    }

    // 子类可访问
    class Demo1 extends Demo {
      sum = 1
      method()

    }

    class Demo2 {
      val b = new Demo
      // b.sum = 2  此时无法访问,因为demo2不是demo的子类
    }

  }

  "公共(Public)成员,scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问" in {
    class Demo {
      var sum = 0

      def method() {}
    }

    // 默认的demo类所有成员都为public, 所以demo1可以访问demo的成员
    class Demo1 {
      var demo = new Demo
      demo.sum = 1
      demo.method()
    }
  }

  "作用域保护 Scala中,访问修饰符可以通过使用限定词强调" in {
    //private[x]   x指代某个所属的包、类或单例对象 ,表示这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对像可见外,对其它所有类都是private

    // 针对[包package] 案例
    class Demo {
      // 指定sum对keypoint包下的类可访问
      private[keypoint] var sum = 0
      private var max = 1
    }

    class Demo1 {
      // 由于Demo1在keypoint包下, 所以可以访问sum
      val demo = new Demo
      demo.sum = 1
      // demo.max = 2 无法访问max
    }
    // TODO: 详情查看包keyPoint下的ScalaScope.scala
  }

 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值