7 scala的类构造器

在创建对象的时候,需要调用类的构造器。Scala 提供了主构造器和辅助构造器。

1 主构造器

与 Java 一样,如果我们没有特别定义,那么 Scala 提供的默认构造器是没有参数的。

我们可以在类名后,指定构造器的参数列表,列表里的参数将成为类的成员属性,这样的构造器叫做主构造器。定义的语法如下:

class 类名(var/val 参数名: 参数类型 = 默认值, var/val 参数名: 参数类型 = 默认值 ...) {
   
	// 构造器代码
}

下面的例子中,我们在主构造器中定义了 name, age, club 三个参数:

class FootballPlayer(name: String, age: Int = 20, club: String = "FIFA") {
   
  var price: Double = 100_0000

  def hello(): String = {
   
    s"${
     this.name} is in ${
     this.club}, ${
     this.age} years old. Pay ${
     this.price} dollar to purchase him."
  }
}

object App {
   
  def main(args: Array[String]): Unit = {
   
    val footBallPlayer = new FootballPlayer("Cristiano Ronaldo", 39, "Al-Nassr FC")
    println(footBallPlayer.hello())
  }
}

运行后,控制台输出:

Cristiano Ronaldo is in Al-Nassr FC, 39 years old. Pay 1000000.0 dollar if you want to purchase him.

2 辅助构造器

如果需要使用多种方式创建对象,可以使用辅助构造器。定义辅助构造器和定义方法类似,通过关键字 def 定义,不同的是,这个方法的名称固定为 this,语法如下:

def this(参数名: 参数类型, 参数名: 参数类型, ...) {
   
	// 构造器代码
}

例如:

/**
 * 球员信息类
 *
 * @param name 球员姓名
 * @param age  年龄
 * @param club 所在俱乐部
 */
class FootballPlayer(name: String, age: Int = 20, club: String = "FIFA") {
   
  /**
   * 身价
   */
  var price: Double = 100_0000

  /**
   * 辅助构造器
   *
   * @param name  球员姓名
   * @param age   年龄
   * @param club  所在俱乐部
   * @param price 身价
   */
  def this(name: String, age: Int, club: String, price: Double) = {
   
    // 调用主构造器
    this(name, age, club)
    this.price = price
  }

  def hello(): String = {
   
    s"${
     this.name} is in ${
     this.club}, ${
     this.age} years old. Pay ${
     this.price} dollar to purchase him."
  }
}

object App {
   
  def main(args: Array[String]): Unit = {
   
    val footBallPlayer = new FootballPlayer("Cristiano Ronaldo", 39, "Al-Nassr FC", 1200_0000)
    println(footBallPlayer.hello())
  }
}

相关推荐

  1. 7 scala构造

    2024-02-11 07:20:02       24 阅读
  2. Scala 和对象

    2024-02-11 07:20:02       10 阅读
  3. python修饰

    2024-02-11 07:20:02       24 阅读
  4. C++入门7 |构造函数|析构函数

    2024-02-11 07:20:02       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-11 07:20:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-11 07:20:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-11 07:20:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-11 07:20:02       18 阅读

热门阅读

  1. 2 超级数据查看器APP 导入功能详解

    2024-02-11 07:20:02       26 阅读
  2. Spring中常见的设计模式

    2024-02-11 07:20:02       27 阅读
  3. Python编写远程控制工具--被控端的编写

    2024-02-11 07:20:02       22 阅读
  4. P1000 超级玛丽游戏(洛谷)

    2024-02-11 07:20:02       24 阅读
  5. re:从0开始的CSS学习之路 10. 盒子模型的溢出

    2024-02-11 07:20:02       23 阅读