Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。
如果没有指定访问修饰符,默认情况下,Scala 对象的访问级别都是 public。
Scala 中的 private 限定符,比 Java 更严格,在嵌套类情况下,外层类甚至不能访问被嵌套类的私有成员。
私有成员(private)
用 private 关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。
class Outer {
class Inner {
private def f(){
println("function f()")
}
class InnerMost {
f() // 正确
}
}
(new Inner()).f() // 错误
// 因为f()在Inner类里面被声明为private类型,该类里的对象可以访问,其子类InnerMost里也可以访问这个方法,
// 但是(new Inner())在Inner类外部声明,不允许访问类的私有成员
}
保护成员(protected)
在 scala 中,对保护(Protected)成员的访问比 java 更严格一些。因为它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。
package p{
class Super{
protected def f(){
println("f")
}
}
class Sub extends Super{
f()
}
class Other{
(new Super).f() //错误
}
}
公共成员(public)
Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。
class Outer {
class Inner {
def f(){
println("f")
}
class InnerMost {
f() // 正确
}
}
(new Inner).f() // 正确因为 f() 是 public
}
上面的例子中,Sub子类里因为它继承了Super类,可以访问 f() 方法,但是Other类里声明的对象 (new Super()) 却不能访问,这是Scala区别于java的地方,在java里,Other类和Super类都在同一个package里,是可以
参考资料:
http://www.runoob.com/scala/scala-access-modifiers.html