`

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() 是非法的,因为f被声明为private内部类并且访问不是在内部类内。与此相反,到f第一接入类最内层是确定的,因为该访问包含在类内的主体。 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
   }
}
类分给 f 访问是正常的,因为f被声明为受保护的超类和子类是超级的子类。相比之下,访问 f 在其他是不允许的,因为其他没有从超级继承。在Java中,后者访问将仍然允许的,因为其他的是在同一个包子。
公共成员:

未标示私有或受保护的每一个成员是公开的。不需要明确使用修饰符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)。
分享到:
评论

相关推荐

    scala 访问修饰符及作用域

    Scala 语言中的访问修饰符是控制类、对象、方法和变量访问权限的关键工具,它们确保了代码的封装性和安全性。Scala 提供了与 Java 类似的访问修饰符,但有些细节有所不同,这使得 Scala 的访问控制更为严格。 1. **...

    Scala进阶_成员访问修饰符

    和Java一样,scala也可以通过访问修饰符,来控制成员变量和成员方法是否可以被访问。 定义 Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala中,没有...

    大数据课程-Scala编程基础-3.Scala面对对象的特性_lk_edit.ppt

    Scala中的类支持构造器、继承、访问修饰符、抽象类和具体实现。对象是单例的,可以直接通过其名称调用,常用于实现全局的、静态的成员。单例对象可以与类伴生,即在一个源文件中,一个类和一个单例对象可以拥有相同...

    Scala编程详解 第12讲-Scala编程详解:面向对象编程之类 共12页.pptx

    如果不指定访问修饰符,Scala会为`var`类型的field生成public的getter和setter,而`val`类型的field只有getter。如果希望控制getter和setter的行为,可以自定义它们。例如,可以创建一个`Student`类,其中的`name`...

    Scala语言规范PDF版

    类定义中还可以使用各种修饰符,包括访问修饰符和抽象修饰符等。Scala中的对象可以是单例的或者可以创建多个实例。 模式匹配是Scala中一项强大的功能,它允许开发者对数据的结构进行检查并根据数据结构的不同而执行...

    大数据技术之Spark编程基础-第2章-Scala语言基础(共155页).pptx

    - 封装:通过访问修饰符控制成员的可见性,以保护数据。 2.4 函数式编程基础 - 高阶函数:Scala中的函数可以作为值传递,也可以作为返回值。 - 基于函数的并发:Scala的Future和Actor模型支持并发处理,避免了状态...

    Effective Scala中文版

    - **可见性**: 理解Scala的访问修饰符和作用域规则。 - **结构类型**: 使用结构类型来编写松耦合的代码。 #### 其他知识点 - **垃圾回收**: Scala程序的内存管理。 - **Java兼容性**: Scala与Java的互操作性。 - **...

    Scala编程实战.rar

    Scala支持构造器、访问修饰符、初始化块等特性,使得面向对象编程更加灵活。 6. **方法**:方法定义了可重用的代码片段,是实现功能的主要手段。Scala的方法可以接受参数,有返回值,并支持默认参数、可变参数等...

    Scala语言规范中文教程

    - **访问修饰符**:`private`, `protected`, `public`控制成员的可见性。 3. **函数式编程** - **函数是一等公民**:Scala中的函数可以作为值传递,存储在变量中,或者作为其他函数的参数或返回值。 - **高阶...

    scala从入门到精通技术教学视频

    07.访问权限修饰符 08.主构造器 09.辅助构造器 10.定义单例对象 11,在单例对象中定义方法 12.如何定义程序的主入口 13.定义伴生对象 14.private[this]访问权限 15.apply()方法 16.案例_定义工具类 第七章 ...

    Scala面向对象编程课件.rar

    这一部分还会讲解Scala的封装、访问控制和权限修饰符,以及如何利用类型系统来确保代码的类型安全。 第二部分,"scala-part3-高级特性.pdf",将深入讨论Scala的一些高级面向对象特性。这包括模式匹配、类型推断、...

    快学 scala 中文版 带完整目录

    15.5.1 Java修饰符 247 15.5.2 标记接口 248 15.5.3 受检异常 249 15.5.4 变长参数 249 15.5.5 JavaBeans 250 15.6 用于优化的注解 250 15.6.1 尾递归 .250 15.6.2 跳转表生成与内联 252 15.6.3 可省略方法 ...

    Scala语言基础|零基础入门.pptx

    在Scala中,可以使用访问修饰符来控制成员的可见性,例如: - **private**:成员仅在其定义的类或对象内部可见。 - **protected**:成员在成员的类及其子类中可见。 - **public**:成员对所有类都可见。 通过以上...

    Scala语言规范

    - `implicit`修饰符用于标记可以自动提供的参数。 - **7.2 隐含参数** - 隐含参数可以在函数调用时省略。 - **7.3 视图** - 视图允许暂时性地改变类型的行为。 - **7.4 视图边界** - 视图边界定义了视图可以应用...

    计算机专业外文翻译THINKINJAVA.pdf

    6. **访问修饰符**:Scala的访问修饰符包括`private`、`protected`和`public`,与Java类似。在这个例子中,`numerator`和`denominator`被声明为`private`,表明它们只能在类内部访问。 7. **类型系统**:Scala的...

    scala-intro-4-complete-newbies:面向新手的Scala入门讲习班

    关于 为对Scala感兴趣但不了解(或很少了解)的人员的入门讲习班。 最初由@LAFK_pl领导,进行了三场相同的聚会: 尝试提供基本功能块并从FP和... 访问修饰符 延迟初始化 类型线性化 部分申请 屈服的 OOP + FP 馆藏

    英文版ScalaReference.pdf

    **5.2 修饰符** 包括`final`、`abstract`、`case`、`sealed`等,用于控制类的行为和可见性。 **5.3 类定义** - **5.3.1 构造定义** - **5.3.2 案例类**:用于模式匹配的轻量级类。 - **5.3.3 特质**:类似于接口,...

    learn-scala-3:现代Scala沙箱

    `操作符,允许安全地访问可选值。同时,`Try`构造器可以与`match`表达式结合,提供了更简洁的异常处理方式。 元编程方面,Scala 3的`Quasiquote`和`Macros`进行了重构,以提高稳定性和安全性。`Quasiquote`现在支持...

    Scala 专题教程 - Case Class和模式匹配-内含源码以及设计说明书(可以自己运行复现).zip

    1. **自动成员访问**:Case Class的成员默认是公开的,可以直接通过`.`操作符访问。 2. **隐式拷贝功能**:创建Case Class实例时,可以方便地修改实例的某个属性,而无需显式创建新实例。 3. **伴生对象**:每个Case...

    Spark面试【梅峰谷】系列整理

    private[this] 修饰符将字段设置为对象私有, Scala 不生成 getter/setter 方法,只能在对象内部访问被修饰的字段。 2. Scala 中内部类和 Java 中的内部类区别 Scala 中的内部类是同一个类的内部类的不同实例,属于...

Global site tag (gtag.js) - Google Analytics