📜  Scala-访问修饰符

📅  最后修改于: 2020-11-02 04:42:03             🧑  作者: Mango


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

私人会员

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

以下是解释私有成员的示例代码片段-

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

在Scala中,访问权限(新Inner)。 f()是非法的,因为f在Inner中声明为私有,并且访问不是从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
   }
}

可以在Sub类中访问f,因为f在’Super’类中声明为受保护,并且’Sub’类是Super的子类。相比之下,不允许访问“其他”类中的f,因为类“其他”不继承自“超级”类。在Java中,由于“ Other”类与“ Sub”类位于同一包中,因此仍将允许后者访问。

公众成员

与私有成员和受保护成员不同,不需要为Public成员指定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。

  • 封闭式包装协会中的任何班级都可以使用可变朋友。

  • 变量秘密只能在实例方法(此方法)中的隐式对象上访问。