文档章节

Scala学习之类和属性篇(二):定义类的辅助构造方法

阿拉德大陆的魔法师
 阿拉德大陆的魔法师
发布于 2016/12/09 17:20
字数 449
阅读 150
收藏 0

在Scala中定义主构造函数使用this关键字:

  • 每一个辅助构造函数都需要调用之前定义的任何一个构造函数
  • 每一个辅助构造函数都要有不同的参数表
  • 一个构造函数使用this关键字调用另一个构造函数
scala> :paste
// Entering paste mode (ctrl-D to finish)

class Pizza(var crustSize: Int, var crustType: String) {
  def this(crustSize: Int) {
    this(crustSize, Pizza.DEFAULT_CRUST_TYPE)
  }

  def this(crustType: String) {
    this(Pizza.DEFAULT_CRUST_SIZE, crustType)
  }

  def this() {
    this(Pizza.DEFAULT_CRUST_SIZE, Pizza.DEFAULT_CRUST_TYPE)
  }

  override def toString = s"A $crustSize inch pizza with a $crustType crust"
}

object Pizza {
  val DEFAULT_CRUST_SIZE = 12
  val DEFAULT_CRUST_TYPE = "THIN"
}

// Exiting paste mode, now interpreting.

defined class Pizza
defined object Pizza

分别使用主构造函数和辅助构造函数来创建类的实例

//使用主构造函数
scala> val p1 = new Pizza(Pizza.DEFAULT_CRUST_SIZE, Pizza.DEFAULT_CRUST_TYPE)
p1: Pizza = A 12 inch pizza with a THIN crust

//使用辅助构造函数
scala> val p2 = new Pizza(Pizza.DEFAULT_CRUST_SIZE)
p2: Pizza = A 12 inch pizza with a THIN crust

scala> val p3 = new Pizza(Pizza.DEFAULT_CRUST_TYPE)
p3: Pizza = A 12 inch pizza with a THIN crust

scala> val p4 = new Pizza()
p4: Pizza = A 12 inch pizza with a THIN crust

要给case class定义一个辅助构造函数,需要在其伴生对象中增加apply方法。

scala> :paste
// Entering paste mode (ctrl-D to finish)

case class Person(var name: String, var age:Int)

object Person{
  def apply() = new Person("<no name>", 0)
  def apply(name: String) = new Person(name, 0)
}

// Exiting paste mode, now interpreting.

defined class Person
defined object Person

调用主构造函数和辅助构造函数来创建case class的实例对象

//辅助构造函数
scala> val a = Person()
a: Person = Person(<no name>,0)
//辅助构造函数
scala> val a = Person("Pam")
a: Person = Person(Pam,0)
//主构造函数
scala> val a = Person("William Shatner", 27)
a: Person = Person(William Shatner,27)
//修改姓名
scala> a.name = "Leonard Nimoy"
a.name: String = Leonard Nimoy
//修改年龄
scala> a.age = 78
a.age: Int = 78
//打印对象
scala> println(a)
Person(Leonard Nimoy,78)

 

© 著作权归作者所有

阿拉德大陆的魔法师
粉丝 27
博文 91
码字总数 83019
作品 0
西城
程序员
私信 提问
Scala学习目录

字符串篇 1.1 字符串的比较 1.2 使用多行字符串 1.3 字符串的切分 1.4 插值函数 1.5 逐字符处理字符串 1.6 使用正则表达式 1.7 访问字符串特定位置的字符 1.8 使用隐式方法来扩展字符串类 2....

阿拉德大陆的魔法师
2016/04/20
367
0
Scala学习之类和属性篇(一):定义类的主构造方法

在Scala中直接在类名后面跟上参数,即可定义类的主构造方法。 接下来我们通过主构造方法来实例化这个类,看看发生了什么。所有定义在类体内部的可执行性代码都被执行了,也就是说整个类内部都...

阿拉德大陆的魔法师
2016/12/08
138
0
Scala学习之类和属性篇(五):getter和setter方法

Scala会根据你定义属性时候使用的关键字:var,val,private来选择是否自动生成getter和setter方法。并且不允许你重写Scala的setter和getter方法。如果你要重写这两个方法你会看到如下编译错...

阿拉德大陆的魔法师
2016/12/10
1K
0
Scala 学习之面向对象(3)

==> 类 ---> 类的定义 class Student{ // 定义属性 private var stuName:String = "Tom" private vat stuAge:Int = 18 // 定义方法 def getStuName():String = stuName def setStuName(newNa......

菜鸟的征程
2018/07/02
0
0
Scala学习之类和属性篇(三):单例与私有构造函数

我们知道,要想使用单例那么就必须定义私有构造函数来防止从类的外部来创建类的实例。在Scala中你也可以通过private关键字定义类的私有主构造函数来防止从类的外部创建类的实例。 你可能发现...

阿拉德大陆的魔法师
2016/12/09
77
0

没有更多内容

加载失败,请刷新页面

加载更多

同名依赖,多次引入导致的程序错误

表现: 本地测试正常,打包上线后报错找不到某个方法(缺少依赖),检测依赖发现,同名依赖有两个版本。 解决:删除一个,程序正常

避难所
22分钟前
3
0
在HTML中的下拉框中实现超连接

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <link rel="canonical" href="https://blog.csdn.net/weixin_34228617/article/details/86130280"/> ......

mickelfeng
27分钟前
3
0
Content7关闭防火墙命令

在外部访问CentOS中部署应用时,需要关闭防火墙。 关闭防火墙命令:systemctl stop firewalld.service 开启防火墙:systemctl start firewalld.service 关闭开机自启动:systemctl disable f...

无名氏的程序员
28分钟前
3
0
分布式存储原理:TiDB

浮躁的码农
41分钟前
6
0
CSS实现圆角边框的完美解决方案

css实现图片圆角,兼容所有浏览器: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <style type= "text/css" > /*通用样式--容器宽度值*/ .s......

前端老手
55分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部