经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Scala » 查看文章
scala字段权限问题
来源:cnblogs  作者:独孤败天1  时间:2019/1/2 9:48:01  对本文有异议

1.对象私有字段

 1)private

  1. class Counter(num: Int) {
  2. private var value = 0
  3.  
  4. def increment() = {
  5. value += 1
  6. }
  7.  
  8. def isLess(other: Counter) = value < other.value
  9.  
  10. def printlnNum(): Unit = {
  11. println("num: " + num)
  12. }
  13.  
  14. // def isLess(other: Counter) = value
  15. }
  16.  
  17.  
  18.  
  19. object Counter {
  20. def main(args: Array[String]): Unit = {
  21. /*
  22. * 1. 方法可以访问类的所有对象的私有字段
  23. */
  24. val counter1 = new Counter(3)
  25. counter1.increment()
  26.  
  27. val counter2 = new Counter(4)
  28. counter2.increment()
  29. counter2.increment()
  30.  
  31. println(counter1.isLess(counter2)) // 结果:true 因为1<2
  32. }
  33. }

  

  解释:方法可以访问类的所有对象的私有字段。 所以即使value字段是private的,非当前对象other对象也可以访问到value字段。

 

 2) private[this]

 解释:私有字段加上[this]修饰符,可以字面简单的理解为该字段是私有的(private)并且只限当前对象[this]使用。 所有other对象访问不到 value 字段。

 

3)类构造参数 

  1. class Counter(num: Int) {
  2. private var value = 0
  3.  
  4. def increment() = {
  5. value += 1
  6. }
  7.  
  8. def isLess(other: Counter) = value < other.value
  9.  
  10. // def isLess(other: Counter) = value
  11. def subNum(other: Counter): Int = {
  12. num - other.num
  13. }
  14. }

  15. // 测试
  16. object Counter {
  17. def main(args: Array[String]): Unit = {
  18. val counter1 = new Counter(3)
  19. val counter2 = new Counter(4)
  20.  
  21. println(counter1.subNum(counter2))
  22. }
  23. }

  编译会报 error: value num is not a member of cn.XX.quickScala.jurisdiction.Counter。

   解释:类构造参数不是字段,所以每个类的构造参数都只能当前对象this访问,是不能在当前类中访问另一个同一个类对象的构造参数的【虽然能点出来,但编译通不过】

 

解决方案: 加字段,将类构造参数赋值给字段

 

 

结果是  -1

 

总结:

private[this] 字段 和 类构造参数都是只能在当前对象范围内访问到,是访问不到同一个类的另一个对象的 private[this]字段 或 类构造参数的。   

但需要注意,访问另一个对象的private[this] 编译器直接会提示找不到,编程的时候是 . 不出来的。而访问另一个对象的 类构造参数时,是可以 . 出来的,但编译通不过。

 

private 所有的类对象都可以访问到,不管是当前this对象还是传入的外围同一个类对象。 同java一样,private字段是只能在当前类型访问的,在类外面是无法访问到的。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号