和很多面向对象语言一样,有private修饰的属性和方法都只能在类内部访问,实例化后的对象无法直接访问。但是由于Scala增加了伴生对象这样一个概念,所以事情有了一些微妙的变化。实际上,伴生对象对类内资源的访问权限介于类本身和类外部之间,而private[this]就是用来操控这一切的关键

name被IDE标红了,说明无法访问,但是如果把object Animal改成object Person,即Person类的伴生对象,事情就不一样了

标红消失,可以正常访问。
如果这时在name属性上加上 [this]修饰,就相当于拿掉了伴生对象这一特殊权限,仅限类内部使用的权限。如下
