说明
* 和java一样,scala创建对象时,也会调用构造器方法,并且可以有多个构造器
*
scala的构造器
* 分类
* 主构造器(类体本身) 、 辅助构造器
* 语法
* class 类名(形参列表) {
* // 主构造器
* // 成员
* def this(形参列表){//辅助构造器1
* }
* def this(形参列表){//辅助构造器2
* }
* }
辅助构造器
* 语法
* def this(参数列表) {
* this() //调用主构造器
* 方法体
* }
* 说明
* 1. 方法名称必须为 this,可以有多个,编译器会根据 参数的个数和类型区分 (方法的重载)
* 2. 辅助构造方法不能直接构造对象,必须 调用主构造方法 this()
* 3. 构造器1可以调用 构造器2,被调用的构造器必须提前声明
主构造器
* 主构造器-参数列表
* 语法
* class 类名(参数列表)
* 说明
* 1. 没有修饰符,参数就是局部变量
* 2. var修饰参数,作为类的成员属性,可以修改
* 3. val修饰参数,作为类的成员属性,不可以修改
* */
/**
* @author gaocun
* @create 2021-10-22 6:49 PM */
object 类_构造器_06 {
/*
* 说明
* 和java一样,scala创建对象时,也会调用构造器方法,并且可以有多个构造器
*
* scala的构造器
* 分类
* 主构造器(类体本身) 、 辅助构造器
* 语法
* class 类名(形参列表) {
* // 主构造器
* // 成员
* def this(形参列表){//辅助构造器1
* }
* def this(形参列表){//辅助构造器2
* }
* }
* 辅助构造器
* 语法
* def this(参数列表) {
* this() //调用主构造器
* 方法体
* }
* 说明
* 1. 方法名称必须为 this,可以有多个,编译器会根据 参数的个数和类型区分 (方法的重载)
* 2. 辅助构造方法不能直接构造对象,必须 调用主构造方法 this()
* 3. 构造器1可以调用 构造器2,被调用的构造器必须提前声明
* 主构造器
* 主构造器-参数列表
* 语法
* class 类名(参数列表)
* 说明
* 1. 没有修饰符,参数就是局部变量
* 2. var修饰参数,作为类的成员属性,可以修改
* 3. val修饰参数,作为类的成员属性,不可以修改
* */
}
package Outer {
// 主构造器 (无参)
class OneClass {
// 成员
var id: Int = _
var name: String = _
println("OneClass - 主构造器 调用了")
// 辅助构造器1
def this(id: Int) {
this() // 调用 主构造器
this.id = id
println("OneClass - 辅助构造器1 调用了")
}
// 辅助构造器2
def this(name: String) {
this() // 调用 主构造器
this.name = name
println("OneClass - 辅助构造器2 调用了")
}
// toString方法
def tostring() = {
printf("OneClass id : %d name : %s\n", this.id, this.name)
}
}
// 主构造器 (带参数 无修饰符)
class TwoClass(id: Int, name: String) {
printf("TwoClass- 主构造器 - id :%d name :%s\n", id, name)
// show
def show = printf("TwoClass - id :%d name :%s\n", id, name)
}
// 主构造器 (带参数 有修饰符)
class ThreeClass(var id: Int, var name: String) {
printf("TwoClass- 主构造器 - id :%d name :%s\n", id, name)
// show
def show = printf("TwoClass - id :%d name :%s\n", id, name)
}
// 测试类
object test {
def main(args: Array[String]): Unit = {
// 调用主构造器
var obj1 = new OneClass()
obj1.tostring
// 调用主构造器 + 辅助构造器1
var obj2 = new OneClass(10)
obj2.tostring
// 调用主构造器 + 辅助构造器2
var obj3 = new OneClass("大王")
obj3.tostring
printf("==========测试 主构造器1==============\n")
var tobj1 = new TwoClass(10, "大王")
tobj1.show
//println(tobj1.id)
printf("==========测试 主构造器2==============\n")
var thobj1 = new ThreeClass(10, "大王")
thobj1.show
println(thobj1.id)
println(thobj1.name)
}
println("test - 主构造器 调用了")
}
}