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)中访问。
  • 相关阅读:
    VB中 参数不可选
    VB中 “实时错误'-2147217887” 和 “编译错误:无效限定符”
    VB中 文本框的ScrollBars属性不管用
    VB中 “编译错误:未找到方法或数据成员””和“实时错误'424'”
    【读书笔记】之《逻辑思维》
    【My SQL】常见语句
    【自考】《数据库系统原理》之键、主键、超键等概念
    Python接口测试实战1(下)- 接口测试工具的使用
    Python接口测试实战1(上)- 接口测试理论
    为应用程序池 ''DefaultAppPool'' 提供服务的进程意外终止。进程 ID 是 ''xxx''问题的解决方法
  • 原文地址:https://www.cnblogs.com/itboys/p/9338790.html
Copyright © 2011-2022 走看看