Scala和Java都是面向对象编程的语言,而对象又隶属于类,所以接下来介绍Scala中常
见的类。Scala 的主要分类如下:
(1)普通类:通过class关键字定义的类。
(2)匿名类:指没有名字的类,可以利用接口和抽象类的名字创建匿名类。
(3)内部类:在普通类中创建的另外一个类。
(4)抽象类:通过abstract关键字定义的类。
在Scala中,类的定义使用关键字 class
。以下是一个简单的Scala类定义的例子:
class Person(val name: String, var 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.")
}
}
在这个例子中,Person
类有两个参数:name
是一个不可变的属性(使用 val
声明),age
是一个可变属性(使用 var
声明)。类中定义了一个方法 greet
,用于打印问候语。
构造器
Scala中的构造器分为两种:
-
主构造器:在类定义中直接定义的构造器。它不能包含任何访问修饰符(如
public
或private
),并且不能有返回类型。主构造器的参数会自动成为类的成员。 -
辅助构造器:使用
this
关键字定义的构造器。辅助构造器可以调用主构造器(通过this()
调用),并且可以有参数列表。
在上面的 Person
类例子中,我们定义了一个辅助构造器,它只接受一个参数 name
,并在内部调用主构造器,将 age
设置为默认值 0
。
类的实例化
创建类的实例(对象)时,可以像调用方法一样调用构造器:
val person1 = new Person("Alice", 30)
person1.greet()
val person2 = new Person("Bob")
person2.greet()
在这个例子中,我们创建了两个 Person
对象:person1
通过提供 name
和 age
参数创建,而 person2
只提供了 name
参数,age
被设置为默认值 0
。
伴生对象
Scala允许在类旁边定义一个伴生对象(companion object),它与类共享同一个名称。伴生对象可以包含静态字段和方法,以及类的工厂方法:
object Person {
def apply(name: String, age: Int): Person = new Person(name, age)
def unapply(person: Person): Option[(String, Int)] = Some((person.name, person.age))
}
val person3 = Person("Charlie", 25)
val person4 = Person("Diana")
在这个例子中,我们定义了一个伴生对象 Person
,它包含一个 apply
方法,可以作为类的工厂方法使用。我们还定义了一个 unapply
方法,它允许模式匹配时解构 Person
对象。
继承
Scala支持单继承,这意味着一个类只能继承一个父类:
class Employee(name: String, age: Int) extends Person(name, age) {
var position: String = _
def describe(): Unit = {
greet()
println(s"I work as a $position.")
}
}
val employee1 = new Employee("Eve", 28)
employee1.position = "Software Engineer"
employee1.describe()
在这个例子中,Employee
类继承自 Person
类,并添加了一个新的属性 position
以及一个新方法 describe
。