Scala 访问修饰符

Scala 访问修饰符

本章介绍了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()是非法的,因为在Inner中f被声明为私有,并且访问不是来自Inner类内部。相比之下,在Innermost类中的第一个访问f是可以的,因为该访问包含在Inner类的体内。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
   }
}

在class Sub中,对f的访问是允许的,因为f在’Super’类中被声明为protected,并且’Sub’类是’Super’类的子类。相比之下,在’Other’类中对f的访问是不允许的,因为’Other’类没有继承自’Super’类。在Java中,后一种访问仍然被允许,因为’Other’类与’Sub’类在同一个包中。

公共成员

与私有成员和受保护的成员不同,对于公共成员不需要指定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)中对隐式对象访问。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程