• 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)中访问。
  • 相关阅读:
    my read map subway / metro / map / ditie / gaotie / traffic / jiaotong
    hd printer lexmark / dazifuyin / dayin / fuyin
    软件应用程序的打包和部署
    99款高质量免费(X)HTML/CSS模板
    PetShop4.0的安装、设置、调试与体验(草稿)
    山塞一个PetShop(Task000)——架构
    如何用C#开发的计算器小软件
    DIV+CSS布局参考站点
    影响计算机性能的设置
    ASP.NET知识点:母版页的路径问题
  • 原文地址:https://www.cnblogs.com/itboys/p/9338790.html
Copyright © 2020-2023  润新知