- Scala 教程
- Scala - 首页
- Scala - 概述
- Scala - 特性
- Scala - 环境设置
- Scala - 构建工具 (SBT)
- Scala - 基本语法
- 数据类型和变量
- Scala - 数据类型
- Scala - 变量
- Scala - 字符串
- Scala - 数组
- Scala 运算符
- Scala - 运算符
- Scala - 算术运算符
- Scala - 关系运算符
- Scala - 逻辑运算符
- Scala - 位运算符
- Scala - 赋值运算符
- Scala 条件语句
- Scala - IF ELSE
- Scala 循环语句
- Scala - 循环语句
- Scala - while 循环
- Scala - do-while 循环
- Scala - for 循环
- Scala - break 语句
- Scala 类与对象
- Scala - 类与对象
- Scala - 访问修饰符
- Scala 方法与函数
- Scala - 函数
- Scala - 按名称调用函数
- Scala - 带命名参数的函数
- Scala - 带可变参数的函数
- Scala - 递归函数
- Scala - 默认参数值
- Scala - 高阶函数
- Scala - 嵌套函数
- Scala - 匿名函数
- 部分应用函数
- Scala - Curry 化函数
- Scala 集合
- Scala - 集合
- Scala - 列表
- Scala - 集合
- Scala - 映射
- Scala - 元组
- Scala - 迭代器
- Scala - Options
- Scala 模式匹配
- Scala - 模式匹配
- Scala - 异常处理
- Scala - 提取器
- Scala - 正则表达式
- Scala 文件 I/O
- Scala - 文件 I/O
- Scala 高级概念
- Scala - 闭包
- Scala - 特质
- Scala 有用资源
- Scala - 快速指南
- Scala - 在线编译器
- Scala - 有用资源
- Scala - 讨论
Scala - 访问修饰符
本章将引导您了解 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 在 Inner 中声明为私有,并且访问并非来自 Inner 类内部。相反,在 Innermost 类中第一次访问 f 是可以的,因为该访问包含在 Inner 类的主体中。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
}
}
在 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,其中 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) 内的隐式对象中访问。