Scala访问修饰符
包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public。这些修饰限制为成员的代码的某些区域访问。要使用访问修饰符,包括它的包,类或对象的成员定义的关键字,我们将在下一节中看到。
私有成员:
私有成员只能看到里面包含的成员定义的类或对象。下面是一个例子:
class Outer { class Inner { private def f() { println("f") } class InnerMost { f() // OK } } (new Inner).f() // Error: f is not accessible }
在Scala中,访问 (new Inner).f() 是非法的,因为f被声明为private内部类并且访问不是在内部类内。与此相反,到f第一接入类最内层是确定的,因为该访问包含在类内的主体。 Java将允许这两种访问,因为它可以让其内部类的外部类访问私有成员。
保护成员:
受保护的成员是从该成员定义的类的子类才能访问。下面是一个例子:
package p { class Super { protected def f() { println("f") } } class Sub extends Super { f() } class Other { (new Super).f() // Error: f is not accessible } }
类分给 f 访问是正常的,因为f被声明为受保护的超类和子类是超级的子类。相比之下,访问 f 在其他是不允许的,因为其他没有从超级继承。在Java中,后者访问将仍然允许的,因为其他的是在同一个包子。
公共成员:
未标示私有或受保护的每一个成员是公开的。不需要明确使用修饰符public。这样的成员可以从任何地方访问。下面是一个例子:
class Outer { class Inner { def f() { println("f") } class InnerMost { f() // OK } } (new Inner).f() // OK because now f() is public }
保护范围:
Scala中的访问修饰符可以增加使用修饰符。形式:private[X]或protected[X]的修饰符意味着访问私有或受保护“达到”X,其中X代表了一些封闭的包,类或单个对象。考虑下面的例子:
package society { package professional { class Executive { private[professional] var workDetails = null private[society] var friends = null private[this] var secrets = null def help(another : Executive) { println(another.workDetails) println(another.secrets) //ERROR } } } }
注意,上面的例子中以下几点:
-
变量workDetails将可对任何一类封闭包professional范围内。
-
变量friends 将可对任何一类封闭包society中。
-
变量secrets 将可只在实例方法隐含的对象(this)。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创优秀实例教程
转载请注明:文章转载自:代码驿站 [http:/www.codeinn.net]
本文标题:Scala访问修饰符
本文地址:http://www.codeinn.net/scala/1198.html