Scala 访问修饰符基本和Java的一样,分别有:private,protected,public。
1.private(私有)成员
用private关键字修饰,带有此标记的成员仅在包含了成员定义的类或对象内部可见,同样的规则还适用内部类。
例;class Outer{
class Inner{
private def f(){println("f")}
class InnerMost{
f() // 正确,,因为这个访问包含在 Inner 类之内。
}
}
(new Inner).f() //错误,(new Inner).f( ) 访问不合法是因为 f 在 Inner 中被声明为 private,而访问不在类Inner之内。
}
Java中允许这两种访问,因为它允许外部类访问内部类的私有成员。
2.protected(保护)成员
在 scala 中,它只允许保护成员在定义了该成员的的类的子类中被访问。而在java中,用protected关键字修饰的成员,除了定义了该成员的类的子类可以访问,同一个包里的其他类也可以进行访问。
package p{
class Super{
protected def f() {println("f")}
}
class Sub extends Super{
f() //正确,因为 f 在 Super 中被声明为 protected,而 Sub 是 Super 的子类。
}
class Other{
(new Super).f() //错误,因为 other 没有继承自 Super。
}
}
而后者在 java 里同样被认可,因为 Other 与 Sub 在同一包
3.public(公共)成员
Scala中,如果没有指定任何的修饰符,则默认为 public。这样的成员在任何地方都可以被访问。
class Outer {
class Inner {
def f() { println("f") }
class InnerMost {
f() // 正确
}
}
(new Inner).f() // 正确因为 f() 是 public
}