1.对象私有字段

1)private

class Counter(num: Int) {
private var value = 0 def increment() = {
value += 1
} def isLess(other: Counter) = value < other.value def printlnNum(): Unit = {
println("num: " + num)
} // def isLess(other: Counter) = value
} object Counter {
def main(args: Array[String]): Unit = {
/*
* 1. 方法可以访问类的所有对象的私有字段
*/
val counter1 = new Counter(3)
counter1.increment() val counter2 = new Counter(4)
counter2.increment()
counter2.increment() println(counter1.isLess(counter2)) // 结果:true 因为1<2
}
}

  

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

2) private[this]

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

3)类构造参数

class Counter(num: Int) {
private var value = 0 def increment() = {
value += 1
} def isLess(other: Counter) = value < other.value // def isLess(other: Counter) = value
def subNum(other: Counter): Int = {
num - other.num
}
}

// 测试
object Counter {
def main(args: Array[String]): Unit = {
val counter1 = new Counter(3)
val counter2 = new Counter(4) println(counter1.subNum(counter2))
}
}

  编译会报 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字段是只能在当前类型访问的,在类外面是无法访问到的。

最新文章

  1. iOS之UI--富文本总结
  2. [Windows 64] (搬运)价值¥ 6,499的软件Navicat Premium11.2.11 最新版及其注册机
  3. subverison的安装与注意事项
  4. java - Annotation元数据
  5. Phoenix - Hbase与SQL
  6. 有用的shell命令
  7. win7下折腾filezilla_client
  8. 数据结构(线段树):BZOJ 3126: [Usaco2013 Open]Photo
  9. IOS 网络编程 代码
  10. C#字典Dictionary排序(顺序、倒序)
  11. 如何把 excel 的数据导入到数据库里面去
  12. 每天一个Linux命令(20)--find命令之exec
  13. 【Unity与23种设计模式】抽象工厂模式(Abstract Factory)
  14. 【python】mongo删除数据
  15. 红外NEC协议
  16. 牛客练习赛32-D-MST+tarjin割边
  17. HTML5的一些知识点
  18. js中forEach,for in,for of的区别
  19. Java多线程(1) 创建
  20. mac 特殊符号的操作

热门文章

  1. 0java之泛型解说
  2. Linux 加阿里yum源
  3. 【Java】函数使用
  4. [翻译] USING GIT IN XCODE [1] 在XCODE中使用GIT[1]
  5. [翻译] ALMoviePlayerController
  6. python安装lib库
  7. Linux echo命令详解
  8. Centos7下Mysql通过.frm和.ibd恢复数据
  9. JVM源码分析之堆外内存完全解读
  10. 学习HTTP