当前位置: 首页 > news >正文

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_0000def 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())}
}
http://www.lryc.cn/news/297607.html

相关文章:

  • 如何在 Mac 上恢复永久删除的文件:有效方法
  • Web后端开发:事务与AOP
  • [word] word如何打印背景和图片? #微信#其他#经验分享
  • Maven - 编译报错:程序包 XXX 不存在(多模块项目)
  • Vue事件中如何使用 event 对象
  • Golang GC 介绍
  • 决策树之scikit-learn
  • Python爬虫之关系型数据库存储#5
  • ANSI Escape Sequence 下落的方块
  • Vagrant 虚拟机工具基本操作指南
  • 中年低端中产程序员从西安出发到海南三亚低成本吃喝万里行:西安-南宁-湛江-雷州-徐闻-博鳌-陵水-三亚-重庆-西安
  • 企业级Spring boot项目 配置清单
  • WordPress函数wptexturize的介绍及用法示例,字符串替换为HTML实体
  • 【Iceberg学习三】Reporting和Partitioning原理
  • 肯尼斯·里科《C和指针》第12章 使用结构和指针(1)链表
  • Xray 工具笔记
  • Linux环境下配置HTTP代理服务器教程
  • JavaEE作业-实验三
  • K8S容器挂了后重启状态正常,但应用无法访问排查处理
  • 问题:老年人心理健康维护与促进的原则为________、________、发展原则。 #媒体#知识分享
  • 【超高效!保护隐私的新方法】针对图像到图像(l2l)生成模型遗忘学习:超高效且不需要重新训练就能从生成模型中移除特定数据
  • Transformer的PyTorch实现之若干问题探讨(二)
  • 解释Python中的GIL(全局解释器锁)及其影响。描述Python中的垃圾回收机制。Python中的类变量和实例变量有什么区别
  • Appium使用初体验之参数配置,简单能够运行起来
  • Java:JDK8新特性(Stream流)、File类、递归 --黑马笔记
  • 【Unity ShaderGraph】| 物体靠近时局部溶解,根据坐标控制溶解的位置【文末送书】
  • 测试OpenSIPS3.4.3的lua模块
  • 【机器学习】数据清洗之处理缺失点
  • Linux 命令行的世界 :2.文件系统中跳转
  • R语言:箱线图绘制(添加平均值趋势线)