在 Scala 中,类和对象是面向对象编程的核心概念。类是对象的模板,定义了对象的属性和行为,而对象是类的一个实例。Scala 结合了面向对象编程和函数式编程的特性,为我们提供了灵活且强大的类和对象模型。


📖 目录

  1. 类的定义与实例化
  2. 构造函数
  3. 继承与多态
  4. 对象(Singleton Object)
  5. 伴生对象
  6. 应用程序入口
  7. 参考资料

1. 类的定义与实例化

在 Scala 中,定义一个类非常简单。类通过 class 关键字定义,类内部可以包含字段、方法和构造函数。

类的定义

class Person(val name: String, val age: Int) {
  def greet(): Unit = {
    println(s"Hello, my name is $name and I am $age years old.")
  }
}

类的实例化

类实例化时,可以通过构造函数为类提供初始值。

val person = new Person("Alice", 25)
person.greet()  // 输出:Hello, my name is Alice and I am 25 years old.


2. 构造函数

主构造函数

主构造函数定义在 class 关键字后面,直接接受参数并初始化类的字段。

class Person(val name: String, val age: Int) {
  // 类的方法
  def greet(): Unit = {
    println(s"Hello, my name is $name and I am $age years old.")
  }
}

辅助构造函数

辅助构造函数使用 def this() 语法定义,可以提供多个构造函数的重载。辅助构造函数通常用于提供不同方式的对象初始化。

class Person(val name: String, val age: Int) {
  def this(name: String) = this(name, 0)  // 辅助构造函数

  def greet(): Unit = {
    println(s"Hello, my name is $name and I am $age years old.")
  }
}

val person1 = new Person("Bob")  // 使用辅助构造函数
person1.greet()  // 输出:Hello, my name is Bob and I am 0 years old.


3. 继承与多态

继承

Scala 支持继承,一个类可以继承另一个类的属性和方法。子类可以重写父类的方法以提供不同的实现。

class Animal(val name: String) {
  def speak(): Unit = {
    println(s"$name makes a sound")
  }
}

class Dog(name: String) extends Animal(name) {
  override def speak(): Unit = {
    println(s"$name barks")
  }
}

val dog = new Dog("Buddy")
dog.speak()  // 输出:Buddy barks

多态

通过继承,Scala 支持多态,这使得相同的方法名可以在不同的子类中有不同的实现。

val animal: Animal = new Dog("Rex")
animal.speak()  // 输出:Rex barks


4. 对象(Singleton Object)

在 Scala 中,object 是一个特殊的类,它只有一个实例。object 用于创建单例对象,通常用于封装应用程序的入口方法、工具方法等。

对象的定义

object MyObject {
  val name = "Singleton Object"
  def greet(): Unit = {
    println(s"Hello from $name!")
  }
}

MyObject.greet()  // 输出:Hello from Singleton Object!

object 关键字定义的对象是单例的,这意味着只能创建一个实例。


5. 伴生对象

在 Scala 中,每个类都可以有一个与之对应的伴生对象(Companion Object)。伴生对象和类位于同一个文件中,且它们可以访问彼此的私有成员。伴生对象通常用于存放与类相关的工厂方法或静态方法。

伴生对象示例

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

object Person {
  def apply(name: String, age: Int): Person = new Person(name, age)
}

val person = Person("Charlie", 30)  // 使用伴生对象的 apply 方法创建实例

apply 方法是伴生对象中的一个特殊方法,它允许你在创建对象时避免使用 new 关键字。apply 方法通常用于工厂方法或简化对象创建过程。


6. 应用程序入口

Scala 的应用程序入口是 object 中的 main 方法,与 Java 类似。可以通过定义一个包含 main 方法的 object 来启动程序。

定义应用程序入口

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, Scala!")
  }
}

HelloWorld.main(Array())  // 输出:Hello, Scala!

简化入口方法

Scala 提供了一种更简洁的方式来定义应用程序入口。只需定义一个 object,然后通过 main 方法启动。

object HelloWorld extends App {
  println("Hello, Scala!")
}

这种方式会自动调用 main 方法并传递 args 参数,简化了代码。


7. 参考资料


在 Scala 中,类和对象是编程的基础,掌握它们的用法将帮助你构建高效、灵活和模块化的应用程序。通过继承、多态、伴生对象等特性,Scala 提供了丰富的面向对象编程支持,同时结合了函数式编程的强大功能。