scala 主构造函数_Scala主构造器和辅助构造器

注:1.本文主要参考自《快学Scala》2.使用jd-gui反编译

Scala的构造方法跟Scala很相似,也可以有任意多的构造器。在Scala中构造器分为主构造器和辅助构造器

在Scala中可以包括一个主构造器和任意多个辅助构造器

主构造器

在Scala中,每个类都有主构造器。而且主构造器的定义是跟类定义交织在一起的。

主构造器的参数是直接放置在类名后面的,如下:

classPerson(val name:String,val age:Int) {//your code

}

主构造器还会执行类语句(不属于任何方法的语句)

classPerson(val name:String,val age:Int) {

println("hello") //该语句属于主构造器

}

主构造器让人感到疑惑的地方主要在于:构造器参数使用不同的形式传递,生成的class文件也是不同的,我们随便列举几种

形式1-val类参数:(在这种形式中,类参数会作为class文件的字段,并且会生成scala形式的getter)

classPerson4(val name:String) {

}

生成的class文件如下:

public classPerson4

{private finalString name;publicString name()

{return this.name;

}publicPerson4(String name) {}

}

形式2-var参数:(该形式的类参数会作为class文件的字段出现,并且会生成scala形式的getter和setter)

classPerson4(var name:String) {

}

生成的class文件如下:

public classPerson4

{privateString name;publicPerson4(String name) {}public void name_$eq(String x$1)

{this.name = x$1;

}publicString name()

{return this.name;

}

}

形式3-普通方法参数

1.如果类参数没有在类方法中用到,该类参数相当于只用于类的主构造函数。

classPerson4(name:String) {

}

该形式生成的class文件如下

public classPerson4

{publicPerson4(String name) {}

}

2.如果类参数在类方法中有用到的话,相当于private[this],即相当于对象私有

classPerson4(name:String) {

def sayHi(){

println(name)

}

}

生成的class文件如下

public classPerson4

{private finalString name;public voidsayHi()

{

Predef..MODULE$.println(this.name);

}publicPerson4(String name) {}

}

主构造器参数还可以是private var、private val形式,这些都比较简单,跟val、var相似,只是get或者set也是private的而已

读者可以自己验证。

辅助构造器

在scala中,辅助构造器的名字必须是this(相比于java中,当类名字改变的时候,就不必在修改构造函数的名字了),而且每个辅助构造器都必须以

主构造函数或者先前定义的辅助构造器开始定义,否则编译不通过。

classPerson4(name:String) {

var age:Int= 0var city:String= ""defthis(name:String,age:Int,city:String){this(name)this.age =age

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值