Scala的类和构造器

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中的构造器分为两种:

  1. 主构造器:在类定义中直接定义的构造器。它不能包含任何访问修饰符(如 publicprivate),并且不能有返回类型。主构造器的参数会自动成为类的成员。

  2. 辅助构造器:使用 this 关键字定义的构造器。辅助构造器可以调用主构造器(通过 this() 调用),并且可以有参数列表。

在上面的 Person 类例子中,我们定义了一个辅助构造器,它只接受一个参数 name,并在内部调用主构造器,将 age 设置为默认值 0

类的实例化

创建类的实例(对象)时,可以像调用方法一样调用构造器:

val person1 = new Person("Alice", 30)
person1.greet()

val person2 = new Person("Bob")
person2.greet()

在这个例子中,我们创建了两个 Person 对象:person1 通过提供 nameage 参数创建,而 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值