Scala 面向对象编程

类、继承、方法与构造器
汇报人:第四组


目录

  1. Scala 与面向对象基础
  2. 类与构造器机制
  3. 继承与多态体系
  4. 进阶与总结

一、Scala 与面向对象基础

1. Scala 简介

  • 多范式语言:融合面向对象(OOP)与函数式编程(FP)
  • 运行平台:基于 JVM
  • 语言起源:由 Martin Odersky 于 2003 年在 EPFL 创建
  • 特点
    • 静态强类型
    • 与 Java 无缝互操作
    • 支持模式匹配、隐式转换等
  • 应用场景
    • Apache Spark 核心语言
    • 被 LinkedIn、Twitter 等公司使用

2. 面向对象核心思想

(1)封装

  • 将数据与行为绑定
  • 隐藏内部实现,对外提供接口
  • 提升安全性与可维护性

(2)继承

  • 基于已有类扩展新类
  • 提高代码复用率
  • 构建层次结构

(3)多态

  • 同一接口,不同实现
  • 支持动态绑定
  • 提高系统扩展性

二、类与构造器机制

1. 类的定义与对象创建

1
2
3
4
5
6
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)

1
class Person(name: String, age: Int)

特点:

  • 与类定义合并
  • 参数直接成为构造逻辑
  • 修饰符决定可见性:
    • val:只读属性
    • var:可变属性
    • 无修饰符:仅构造参数

优势:

  • 代码简洁
  • 减少样板代码
  • 更安全(推荐不可变)

3. 辅助构造器(Auxiliary Constructor)

1
2
3
4
5
class Person(name: String) {  
def this() = {
this("default")
}
}

规则:

  • 必须命名为 this
  • 第一行必须调用主构造器
  • 不能定义字段
  • 用于提供多种初始化方式

三、继承与多态体系

1. 继承(extends)

1
2
class Worker(name: String, age: Int, val company: String)  
extends Person(name, age)

特点:

  • 单继承
  • 默认继承 AnyRef
  • 支持多层继承

2. 方法重写(override)

1
override def toString: String = "Worker"

规则:

  • 必须使用 override
  • 方法签名必须一致
  • 常见重写方法:
    • toString
    • equals
    • hashCode

3. 构造器与继承

  • 子类必须调用父类构造器
  • 使用 super
  • 执行顺序:
    1. 父类初始化
    2. 子类初始化

4. 多态与类型检查

1
val p: Person = new Worker(...)
  • 父类引用指向子类对象
  • 动态绑定方法

类型转换:

1
2
3
if (obj.isInstanceOf[Worker]) {  
val w = obj.asInstanceOf[Worker]
}

5. 抽象类与特质

对比 抽象类 特质
定义 abstract class trait
继承 单继承 多继承(with)
构造参数 支持 不支持
用途 类型层次 行为复用

四、进阶与总结

1. 单例对象(object)

1
2
3
object Utils {  
def hello() = "Hi"
}

特点:

  • 全局唯一实例
  • 无需 new
  • 线程安全

应用:

  • 工具类
  • 常量管理
  • 程序入口

2. 封装与访问控制

  • private:限制访问范围
  • 伴生对象(Companion Object)
    • 与类同名
    • 可互访私有成员

示例:

1
2
3
4
5
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 融合
  • 高扩展性与可维护性