当前位置: 首页 > 文档资料 > Scala 中文文档 >

访问修饰符( Access Modifiers)

优质
小牛编辑
142浏览
2023-12-01

本章将指导您完成Scala访问修饰符。 包,类或对象的成员可以使用访问修饰符私有和受保护标记,如果我们不使用这两个关键字中的任何一个,则访问将被假定为公共访问。 这些修饰符限制对成员到某些代码区域的访问。 要使用访问修饰符,请在包,类或对象的成员定义中包含其关键字,我们将在下一节中看到。

私人会员

私有成员仅在包含成员定义的类或对象内可见。

以下是解释私人会员的示例代码段 -

例子 (Example)

class Outer {
   class Inner {
      private def f() { println("f") }
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

在Scala中,访问(新内部)。 f()是非法的,因为f在Inner中声明为private,而访问不在Inner类内。 相比之下,在Innermost类中第一次访问f是可以的,因为该访问包含在Inner类的主体中。 Java允许两种访问,因为它允许外部类访问其内部类的私有成员。

受保护的会员

受保护的成员只能从定义成员的类的子类访问。

以下是解释受保护成员的示例代码段 -

例子 (Example)

package p {
   class Super {
      protected def f() { println("f") }
   }
   class Sub extends Super {
      f()
   }
   class Other {
      (new Super).f() // Error: f is not accessible
   }
}

在Sub类中访问f是正常的,因为f在'Super'类中被声明为受保护,而'Sub'类是Super的子类。 相比之下,不允许在“其他”类中访问f,因为“其他”类不会继承“超级”类。 在Java中,后一个访问仍然是允许的,因为'Other'类与'Sub'类在同一个包中。

公众成员

与私有成员和受保护成员不同,不需要为Public成员指定Public关键字。 公共成员没有明确的修饰符。 这些成员可以从任何地方访问。

以下是解释公共成员的示例代码段 -

例子 (Example)

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

保护范围

Scala中的访问修饰符可以使用限定符进行扩充。 私有[X]或受保护[X]形式的修饰符意味着访问是私有的或受到“最多”X的保护,其中X表示一些封闭的包,类或单个对象。

考虑以下示例 -

例子 (Example)

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
         }
      }
   }
}

Note - 以上示例中的以下几点 -

  • 可以在封闭包专业人员中的任何类访问变量workDetails。

  • 封闭的包装社会中的任何类别都可以访问可变的朋友。

  • 只有实例方法中的隐式对象才能访问可变秘密(this)。