目录
修饰符private、protected、public
Scala访问修饰符和Java基本一样,分别有private、protected、public。默认缺省情况下,Scala对象的访问级别是public。
私有成员:
用private关键字修饰的成员仅在包含了成员定义的类内部或对象内部可见。Java中允许这两种访问,它允许外部类访问内部类的私有成员。
class test{}class Outer{
class Inner{
private def p(){
println( "p")
}
class InnerMost{
p() //正确
}
}
//(new Inner).f("Outer") //错误,外层类不能访问被嵌套类的私有成员,Java中支持
}
保护成员:
Scala比Java中更严格。只允许保护成员在定义了该成员的类的子类中被访问。Java中除定义了该保护成员的类的子类中可被访问,同一个包下的其他类也可以进行访问。
package p{
class Supper{
protected def p(){
println("p")
}
}
class Sub extends Supper{
p() //正确
}
class other{
// (new Supper).p() //错误,只有子类可以。java支持,protected成员在同包下类中也可访问
}
}
公共成员:
默认public,这样的成员在任何地方都可以被访问。
class test{}class Outer{
class Inner{
def p(){
println( "p")
}
class InnerMost{
p() //正确
}
}
//(new Inner).f("Outer") //正确
}
作用域保护
Scala中访问修饰符可以通过使用限定词强调。格式private[x] 或 protected[x]
X指某个所属的包、类、单例对象。private[x],读作“这个成员除了对[…]中的类或[…]中的包中的类及它们的伴生对象可见外,对其他所有类都是private
Private[this] val x,只能被this访问,即只能被当前对象访问
Private val x,可以被另一个对象访问
Java的访问权限表
不写(default)默认:包内可访问
Private私有:类内可访问
Protected保护:包内和子类可访问
Public公有:都可访问