学习
Scala 面向对象编程
类、继承、方法与构造器 汇报人:第四组
目录
- Scala 与面向对象基础
- 类与构造器机制
- 继承与多态体系
- 进阶与总结
一、Scala 与面向对象基础
1. Scala 简介
- 多范式语言:融合面向对象(OOP)与函数式编程(FP)
- 运行平台:基于 JVM
- 语言起源:由 Martin Odersky 于 2003 年在 EPFL 创建
- 特点:静态强类型
- 与 Java 无缝互操作
- 支持模式匹配、隐式转换等
应用场景:
- Apache Spark 核心语言
- 被 LinkedIn、Twitter 等公司使用
2. 面向对象核心思想
(1)封装
- 将数据与行为绑定
- 隐藏内部实现,对外提供接口
- 提升安全性与可维护性
(2)继承
- 基于已有类扩展新类
- 提高代码复用率
- 构建层次结构
(3)多态
- 同一接口,不同实现
- 支持动态绑定
- 提高系统扩展性
二、类与构造器机制
1. 类的定义与对象创建
class Person(name: String) {
val age: Int = 25
def greet(): String = "Hello"
}
val p = new Person("Alice")
- class:定义类
- new:创建对象(可省略)
- 成员:属性:val / var
- 方法:def
2. 主构造器(Primary Constructor)
| class Person(name: String, age: Int) |
|---|
特点:
- 与类定义合并
- 参数直接成为构造逻辑
- 修饰符决定可见性:val:只读属性
- var:可变属性
- 无修饰符:仅构造参数
优势:
- 代码简洁
- 减少样板代码
- 更安全(推荐不可变)
3. 辅助构造器(Auxiliary Constructor)
class Person(name: String) {
def this() = {
this("default")
}
}
规则:
- 必须命名为 this
- 第一行必须调用主构造器
- 不能定义字段
- 用于提供多种初始化方式
三、继承与多态体系
1. 继承(extends)
class Worker(name: String, age: Int, val company: String)
extends Person(name, age)
特点:
- 单继承
- 默认继承 AnyRef
- 支持多层继承
2. 方法重写(override)
| override def toString: String = "Worker" |
|---|
规则:
- 必须使用 override
- 方法签名必须一致
- 常见重写方法:toString
- equals
- hashCode
3. 构造器与继承
- 子类必须调用父类构造器
- 使用 super
- 执行顺序:父类初始化
- 子类初始化
4. 多态与类型检查
| val p: Person = new Worker(...) |
|---|
- 父类引用指向子类对象
- 动态绑定方法
类型转换:
if (obj.isInstanceOf[Worker]) {
val w = obj.asInstanceOf[Worker]
}
5. 抽象类与特质
| 对比 | 抽象类 | 特质 |
|---|---|---|
| 定义 | abstract class | trait |
| 继承 | 单继承 | 多继承(with) |
| 构造参数 | 支持 | 不支持 |
| 用途 | 类型层次 | 行为复用 |
四、进阶与总结
1. 单例对象(object)
object Utils {
def hello() = "Hi"
}
特点:
- 全局唯一实例
- 无需 new
- 线程安全
应用:
- 工具类
- 常量管理
- 程序入口
2. 封装与访问控制
- private:限制访问范围
- 伴生对象(Companion Object):与类同名
- 可互访私有成员
示例:
class Person private (name: String)
object Person {
def apply(name: String) = new Person(name)
}
3. 常见误区
- 忘记 override
- 构造器调用错误
- 特质初始化顺序问题
- 滥用 var
4. 最佳实践
- 始终使用 override
- 合理设计构造器
- 使用 lazy val
- 优先使用不可变变量(val)
总结
Scala 面向对象编程的核心优势:
- 简洁优雅的语法
- 强类型安全
- OOP + FP 融合
- 高扩展性与可维护性
评论