虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Scala > Scala访问修饰符

Scala访问修饰符
类别:Scala   作者:码皇   来源:互联网   点击:

包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public。这些修饰限制为成员的代码的某些区域访问。要使用访问修饰符,包括它的包,类或对象的成

包,类或对象的成员可以标记访问修饰符private和protected,如果我们不使用这两种关键字,那么访问将被默认设置为public。这些修饰限制为成员的代码的某些区域访问。要使用访问修饰符,包括它的包,类或对象的成员定义的关键字,我们将在下一节中看到。

私有成员:

私有成员只能看到里面包含的成员定义的类或对象。下面是一个例子:
 

  1. class Outer { 
  2.    class Inner { 
  3.       private def f() { println("f") } 
  4.       class InnerMost { 
  5.          f() // OK 
  6.       } 
  7.    } 
  8.    (new Inner).f() // Error: f is not accessible 

在Scala中,访问 (new Inner).f() 是非法的,因为f被声明为private内部类并且访问不是在内部类内。与此相反,到f第一接入类最内层是确定的,因为该访问包含在类内的主体。 Java将允许这两种访问,因为它可以让其内部类的外部类访问私有成员。

保护成员:

受保护的成员是从该成员定义的类的子类才能访问。下面是一个例子:

  1. package p { 
  2.    class Super { 
  3.       protected def f() { println("f") } 
  4.    } 
  5.    class Sub extends Super { 
  6.       f() 
  7.    } 
  8.    class Other { 
  9.      (new Super).f() // Error: f is not accessible 
  10.    } 

类分给 f 访问是正常的,因为f被声明为受保护的超类和子类是超级的子类。相比之下,访问 f 在其他是不允许的,因为其他没有从超级继承。在Java中,后者访问将仍然允许的,因为其他的是在同一个包子。

公共成员:

未标示私有或受保护的每一个成员是公开的。不需要明确使用修饰符public。这样的成员可以从任何地方访问。下面是一个例子:

  1. class Outer { 
  2.    class Inner { 
  3.       def f() { println("f") } 
  4.       class InnerMost { 
  5.          f() // OK 
  6.       } 
  7.    } 
  8.    (new Inner).f() // OK because now f() is public 

 

保护范围:

Scala中的访问修饰符可以增加使用修饰符。形式:private[X]或protected[X]的修饰符意味着访问私有或受保护“达到”X,其中X代表了一些封闭的包,类或单个对象。考虑下面的例子:

  1. package society { 
  2.    package professional { 
  3.       class Executive { 
  4.          private[professional] var workDetails = null 
  5.          private[society] var friends = null 
  6.          private[this] var secrets = null 
  7.  
  8.          def help(another : Executive) { 
  9.             println(another.workDetails) 
  10.             println(another.secrets) //ERROR 
  11.          } 
  12.       } 
  13.    } 

注意,上面的例子中以下几点:

  • 变量workDetails将可对任何一类封闭包professional范围内。

  • 变量friends 将可对任何一类封闭包society中。

  • 变量secrets 将可只在实例方法隐含的对象(this)。

相关热词搜索: Scala访问修饰符
上一篇:Scala变量
下一篇:Scala运算符