1、构造器概述
*1.1、scala构造器
* scala构造对象也需要调用构造方法,并且了可以有任意多个构造方法
* scala类的构造器:主构造器和辅助构造器
* 1.2、构造器基本语法
* def 类名(形参列表){//主构造器
* //类体
*
* def this(形参列表){//辅助构造器
* }
* def this(形参列表){//辅助构造器
* }
* ...辅助构造器可以有多个
* }
* 1.3、辅助构造器的数量
* 辅助构造器的函数函数名称this,可以有多个,编译器通过不同参数区分
```python
object gouzaoqi {
def main(args: Array[String]): Unit = {
val st1 = new person("sta",19)
println(st1)
}
}
//构造器快速入门
//创建person对象同时初始化对象age属性值和name属性值
class person(name:String,age:Int) {
var st_name: String = name
var st_age: Int = age
//重写tostring,便于输出对象信息
override def toString: String = {
"name=" + this.name + "\t age=" + this.age
}
}
```scala
//输出结果
name=sta age=19
2、构造器注意细节
* scala构造器注意事项和细节
①构造器作用:完成新对象初始化,构造器没有返回值
②主构造器的声明直接放置于类名之后
③主构造器会执行类定义中的所有语句,即构造器也是方法(函数)
④主构造器会将构造器里的除去函数部分,其余全部执行
object gouzaoqi {
def main(args: Array[String]): Unit = {
//构造器调用
val st1 = new person("sta",19)
println(st1)
}
}
//构造器快速入门
//创建person对象同时初始化对象age属性值和name属性值
class person(name:String,age:Int) {
var st_name: String = name
var st_age: Int = age
println("this is one")
//重写tostring,便于输出对象信息
override def toString: String = {
"name=" + this.name + "\t age=" + this.age
}
println("this is three")
}
//输出结果
this is one
this is three
name=sta age=19
***输出结果顺序:先调用主构造器里面出函数之外的东西 - 再调用主构造器里的函数
3、辅助构造器
①辅助构造器的名称为this。
②每个辅助构造器都必须以一个对先欠已经定义的其他构造器调用先开始。
object gouzaoqi {
def main(args: Array[String]): Unit = {
//调用主构造器
//var st1 = new person("stu1",19)
//println(st1)
//调用辅助构造器def this(name:string)
val st2 = new person("stu2")
println(st2)
}
}
//定义一个person类
//创建person对象同时初始化对象age属性值和name属性值
class person(inname:String,inage:Int) {
var stu_name: String = inname
var stu_age: Int = inage
println("this is one")
//重写tostring,便于输出对象信息
override def toString: String = {
"name=" + this.inname + "\t age" + this.inage
}
def this(name:String){
//辅助构造器必须在第一行显式调用主构造器
this("one",10)
this.stu_name = name //主构造属性重新赋值
}
println("this is three")
}
输出结果
this is one
this is three
name=one age10
***为什么是这样的输出结果???待核查
4、构造器属性相关
①如果主构造器是 inname,那么inname就是一个局部变量
class worker(inname:String){
var name = inname
}
②2、如果主构造器是val inname,那么inname就是一个主构造器的只读私有属性
class worker(val inname:String){
var name = inname
}
③3、如果主构造器是val inname,那么inname就是一个主构造器的可读写私有属性
class worker(var inname:String){
var name = inname
}