在scala中,我可以将访问修饰符添加到类/特征/对象,例如
private class Foo
protected[this] trait Foo
我没有在这些class / trait / object-level修饰符上找到任何好的解释。所有这些组合是否有意义,它们实际意味着什么?
答案 0 :(得分:3)
它们与类/特征成员的访问修饰符相同,因为类和特征也可以是其他类的成员。例如:
class A {
private class Foo
}
班级Foo
仅对班级A
可见。如果我将修饰符更改为private[this]
,那么它将被称为对象私有,因此任何Foo
仅对其可见 A
的父实例。
声明private
,private[this]
,protected
或protected[this]
只能在另一个类或特征中真正有意义,因为它必须是某些东西的私有。在这种情况下,Foo
是A
的私有。这同样适用于特质。
我们也可以不拥有一个包含对象,并使它们包私有。
package com.example.foo
private[foo] class Foo
现在,类Foo
仅对包com.example.foo
的其他成员可见。
他们有意义吗?在某些情况下,我确信在其他对象中包含私有类和特征是有用的。