包,类或对象的成员可以标记访问修饰符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 提供了与 Java 类似的访问修饰符,但有些细节有所不同,这使得 Scala 的访问控制更为严格。 1. **...
和Java一样,scala也可以通过访问修饰符,来控制成员变量和成员方法是否可以被访问。 定义 Java中的访问控制,同样适用于scala,可以在成员前面添加private/protected关键字来控制成员的可见性。但在scala中,没有...
Scala中的类支持构造器、继承、访问修饰符、抽象类和具体实现。对象是单例的,可以直接通过其名称调用,常用于实现全局的、静态的成员。单例对象可以与类伴生,即在一个源文件中,一个类和一个单例对象可以拥有相同...
如果不指定访问修饰符,Scala会为`var`类型的field生成public的getter和setter,而`val`类型的field只有getter。如果希望控制getter和setter的行为,可以自定义它们。例如,可以创建一个`Student`类,其中的`name`...
类定义中还可以使用各种修饰符,包括访问修饰符和抽象修饰符等。Scala中的对象可以是单例的或者可以创建多个实例。 模式匹配是Scala中一项强大的功能,它允许开发者对数据的结构进行检查并根据数据结构的不同而执行...
- 封装:通过访问修饰符控制成员的可见性,以保护数据。 2.4 函数式编程基础 - 高阶函数:Scala中的函数可以作为值传递,也可以作为返回值。 - 基于函数的并发:Scala的Future和Actor模型支持并发处理,避免了状态...
- **可见性**: 理解Scala的访问修饰符和作用域规则。 - **结构类型**: 使用结构类型来编写松耦合的代码。 #### 其他知识点 - **垃圾回收**: Scala程序的内存管理。 - **Java兼容性**: Scala与Java的互操作性。 - **...
Scala支持构造器、访问修饰符、初始化块等特性,使得面向对象编程更加灵活。 6. **方法**:方法定义了可重用的代码片段,是实现功能的主要手段。Scala的方法可以接受参数,有返回值,并支持默认参数、可变参数等...
- **访问修饰符**:`private`, `protected`, `public`控制成员的可见性。 3. **函数式编程** - **函数是一等公民**:Scala中的函数可以作为值传递,存储在变量中,或者作为其他函数的参数或返回值。 - **高阶...
07.访问权限修饰符 08.主构造器 09.辅助构造器 10.定义单例对象 11,在单例对象中定义方法 12.如何定义程序的主入口 13.定义伴生对象 14.private[this]访问权限 15.apply()方法 16.案例_定义工具类 第七章 ...
这一部分还会讲解Scala的封装、访问控制和权限修饰符,以及如何利用类型系统来确保代码的类型安全。 第二部分,"scala-part3-高级特性.pdf",将深入讨论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中,可以使用访问修饰符来控制成员的可见性,例如: - **private**:成员仅在其定义的类或对象内部可见。 - **protected**:成员在成员的类及其子类中可见。 - **public**:成员对所有类都可见。 通过以上...
- `implicit`修饰符用于标记可以自动提供的参数。 - **7.2 隐含参数** - 隐含参数可以在函数调用时省略。 - **7.3 视图** - 视图允许暂时性地改变类型的行为。 - **7.4 视图边界** - 视图边界定义了视图可以应用...
6. **访问修饰符**:Scala的访问修饰符包括`private`、`protected`和`public`,与Java类似。在这个例子中,`numerator`和`denominator`被声明为`private`,表明它们只能在类内部访问。 7. **类型系统**:Scala的...
关于 为对Scala感兴趣但不了解(或很少了解)的人员的入门讲习班。 最初由@LAFK_pl领导,进行了三场相同的聚会: 尝试提供基本功能块并从FP和... 访问修饰符 延迟初始化 类型线性化 部分申请 屈服的 OOP + FP 馆藏
**5.2 修饰符** 包括`final`、`abstract`、`case`、`sealed`等,用于控制类的行为和可见性。 **5.3 类定义** - **5.3.1 构造定义** - **5.3.2 案例类**:用于模式匹配的轻量级类。 - **5.3.3 特质**:类似于接口,...
`操作符,允许安全地访问可选值。同时,`Try`构造器可以与`match`表达式结合,提供了更简洁的异常处理方式。 元编程方面,Scala 3的`Quasiquote`和`Macros`进行了重构,以提高稳定性和安全性。`Quasiquote`现在支持...
1. **自动成员访问**:Case Class的成员默认是公开的,可以直接通过`.`操作符访问。 2. **隐式拷贝功能**:创建Case Class实例时,可以方便地修改实例的某个属性,而无需显式创建新实例。 3. **伴生对象**:每个Case...
private[this] 修饰符将字段设置为对象私有, Scala 不生成 getter/setter 方法,只能在对象内部访问被修饰的字段。 2. Scala 中内部类和 Java 中的内部类区别 Scala 中的内部类是同一个类的内部类的不同实例,属于...