33、Scala 可见性规则与类型系统初探

Scala 可见性规则与类型系统初探

1. 面向对象设计中的常规可见性原则

在面向对象设计里,字段通常应设为私有(private)或受保护(protected)。若需访问字段,应通过方法实现,且默认并非所有内容都应可访问。这么做主要有两个原因:
- 防止用户在开发者无法控制的情况下修改可变字段。不过,使用不可变值可消除此顾虑。
- 特定字段可能属于实现细节,而非开发者想暴露的公共抽象部分。

当访问合理时,统一访问原则(Uniform Access Principle)的优点在于,能为用户提供公共字段访问的语义,可根据任务需求,选择使用方法或直接访问字段,用户无需知晓具体实现方式,甚至在修改实现时,也无需强制用户修改代码,仅需重新编译。

类型的“用户”有两种:派生类型和处理该类型实例的代码。派生类型通常比实例用户更需要访问其父类型的成员。

2. Scala 可见性规则概述

Scala 的可见性规则与 Java 类似,但应用更一致且更灵活。例如,在 Java 中,若内部类有私有成员,外部类可访问;而在 Scala 中,外部类无法访问私有成员,但 Scala 提供了让其对外部类可见的声明方式。

可见性修饰关键字(如 private 和 protected)与 Java 和 C# 一样,出现在声明开头,可用于类型的 class 或 trait 关键字前、字段的 val 或 var 前以及方法的 def 前。还能在类的主构造函数上使用访问修饰关键字,将其置于类型名和类型参数(若有)之后、参数列表之前,如 class Restricted[+A] private (name: String) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值