(一)辅助构造函数
1. 构造函数(构造器)的作用是什么? 创建对象。
2. 构造函数只能有一个吗? 可以有多个。可以有很多个,其他的叫辅助构造函数。
辅助构造函数的作用是支持更多的创建对象的方式。
格式
辅助构造器的方法名固定为this,其参数不能使用var或val修饰,且必须在第一行代码中直接或间接调用主构造器
class 类名(参数列表A) { def this(参数列表B){
this(参数列表A)
其他代码
}
def this(参数列表C){
this(参数列表A)
其他代码
}
}
def main(args: Array[String]): Unit = {
new 类名(参数列表A) // 直接调用主构造器
new 类名(参数列表B) // 调用辅助构造器
new 类名(参数列表C) // 调用辅助构造器
}
package level02
object Class06 {
// 链式
// arr.map(x => 2*x).filter(x=>x>=5).foreach(println)
// 实现要点:把当前方法的返回值设置为当前对象!
class Student() {
def sayHi(): Student = {
println("sayHi")
this
}
def sayHello(): Student = {
println("sayHello")
this // 返回当前对象
}
}
def main(args: Array[String]): Unit = {
val stu = new Student()
// 链式调用:方法.方法.方法.....
stu.sayHi().sayHello()
// val arr1 = Array(1,2,3)
// arr1.map(x => 2*x).filter(x=>x>=5).foreach(println)
}
}
辅助构造器的作用
1.提供多种初始化方式:
辅助构造器允许类提供多种初始化选项,使得创建对象时更加灵活。
2.简化对象创建:
通过定义多个辅助构造器,您可以简化对象的创建过程,避免在主构造器中处理过多的参数。
3.调用主构造器:
辅助构造器可以通过 this 关键字调用主构造器,从而确保所有初始化逻辑都集中在主构造器中。
(二)案例-用户注册类
ss Register(val name:String, var email:String, var pwd:String, var // Scala辅助构造器
class Person(val name: String, val age: Int, val position: String) {
// 场景1:为position属性提供默认值
def this(name: String, age: Int) = {
this(name, age, "员工")
}
// 场景2:只提供name,为age和position提供默认值
def this(name: String) = {
this(name, 18, "实习生")
}
// 场景3:无参构造器,使用默认值初始化所有属性
def this() = {
this("匿名用户", 20, "访客")
}
// 场景4:参数重载 - 使用不同的参数组合
def this(name: String, position: String) = {
this(name, 25, position)
}
// 显示人员信息的方法
def displayInfo(): Unit = {
println(s"姓名:age, 职位:$position")
}
} // 测试对象
object PersonDemo extends App {
// 使用主构造器创建对象
val person1 = new Person("张三", 30, "经理")
person1.displayInfo()
// 使用辅助构造器1 - 默认职位
val person2 = new Person("李四", 25)
person2.displayInfo()
// 使用辅助构造器2 - 默认年龄和职位
val person3 = new Person("王五")
person3.displayInfo()
// 使用辅助构造器3 - 无参构造
val person4 = new Person()
person4.displayInfo()
// 使用辅助构造器4 - 参数重载
val person5 = new Person("赵六", "工程师")
person5.displayInfo()
}
package level02
// var 修饰的属性是可以被修改的
// val 修饰的属性是只读的,不能被修改
// Student() 构造函数(构造器),用来创建对象
// 1. 主构造函数 class Student()
// 2. 辅助构造函数
class Student(var name: String, val age: Int) {
println("Student........")
// 辅助构造函数
// 特点:1. 名字就是this 2. 第一句代码就是调用主构造器
def this() = {
this("未知的", 18) // 调用主构造函数
println("辅助构造器被调用了....")
}
def this(age: Int) = {
this("未知的", age)
}
def sayHi(): Unit = {
println(s"我是${name},我今年${age}")
}
}
object Class01 {
def main(args: Array[String]): Unit = {
// 创建对象 -> new 会自动调用构造函数
val stu1 = new Student("小花", 18)
val stu2 = new Student()
val stu3 = new Student(20)
// 调用对象的方法
stu1.sayHi()
// 调用对象的方法
stu2.sayHi()
stu3.sayHi()
}
}