zoukankan      html  css  js  c++  java
  • Scala系统学习(五):Scala访问修辞符

    本章将介绍Scala访问修饰符。包,类或对象的成员可以使用私有(private)和受保护(protected)的访问修饰符进行标注,如果不使用这两个关键字的其中一个,那么访问将被视为公开(public)的。这些修饰符限制了对某些代码区域的成员访问。要使用访问修饰符,请将其关键字包含在包,类或对象的成员的定义中,我们将在下一节中看到。

    私有成员

    私有(private)成员只能在包含成员定义的类或对象内部可见。

    以下是示例代码段解释私有(private)成员 -

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

    在Scala,访问(new Inner). f()是非法的,因为fInner类中声明为private,并且访问不在Inner类内。 相比之下,第一次在“InnerMost”类中访问f()是可以的,因为该访问包含在Inner类的主体中。在Java中也允许这样的两个访问,因为它允许外部类访问其内部类的私有成员。

    受保护的会员

    受保护(protected)成员只能从定义成员的类的子类访问。以下是说明受保护(protected)成员的示例代码片段 -

    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的子类。 相反,不允许访问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)中访问。
  • 相关阅读:
    调试IPV6
    [super class]和[self class]
    Django2 + python3 上传图片
    django2 + python3 显示静态文件中的图片
    机器工厂——贪心
    Handstand 2——AT(先打表)
    Low Elements--AT
    Double Factorial——AT
    Brick Break——AT
    变音量——动态规划
  • 原文地址:https://www.cnblogs.com/itboys/p/9338790.html
Copyright © 2011-2022 走看看