Scala—辅助构造函数

28 阅读2分钟

一、辅助构造函数的格式

辅助构造器的方法名固定为 this ,其参数不能使用var或val修饰,且必须在第一行代码中直接或间接调用主构造器。

辅助构造器的作用:

1.提供多种初始化方式:

辅助构造器允许类提供多种初始化选项,使得创建对象时更加灵活。

2.简化对象创建:

通过定义多个辅助构造器,您可以简化对象的创建过程,避免在主构造器中处理过多的参数。

3.调用主构造器:

辅助构造器可以通过 this 关键字调用主构造器,从而确保所有初始化逻辑都集中在主构造器中。

// 格式:
class 类名(参数列表A) {
    def this(参数列表B){
      this(参数列表A)
      其他代码
    }
    def this(参数列表C){
      this(参数列表A)
      其他代码
    }
  }
  def main(args: Array[String]): Unit = {
* new 类名(参数列表A// 直接调用主构造器
* new 类名(参数列表B// 调用辅助构造器  
* new 类名(参数列表C) // 调用辅助构造器
// 定义类
// 主构造函数
class Customer(var name:String, var:sex:String) {
  var age:Int = 0     
//   辅助构造器
  def this(name: String, sex: String, age: Int){
this(name, sex)  
this.age = age  
  }  
}

案例:

// 类是属性的集合
// Student,构造函数用来创建对象的
//          辅助构造函数,提供多种创建对象的方式
class Student(var name:String,var age:Int) {
 println("构造函数被调用...")

 def sayHi(): Unit = {
  println(s"我是${name},我今年${age}")
 }
  • 辅助构造函数
  • (1) 它的名字就是this
  • (2) 它内部第一句代码就必须是调用 主构造函数 this("无名氏", 0)
def this() = {
 this("无名氏", 0)
 println("辅助构造函数1被调用...")
}

def this(name:String) = {
 this(name,20)
 println("辅助构造函数2被调用...")
}
}
// 创建一个学生对象
val stu1 = new Student("小花",18)
// 调用对象的方法
stu1.sayHi()

stu1.age = 19
// 调用对象的方法
stu1.sayHi()
// 这里没有设置参数,它会调用辅助构造函数
    val stu2 = new Student()
    stu2.sayHi()

// 这里设置了一个参数,它会调用辅助构造函数
val stu3 = new Student("小明")
stu3.sayHi()

二、private

object base56 {
 // 私有 private
 class Student(var name:String, var age:Int) {

  // 在方法前面添加 private,那这个方法是私有的,它不能在class的外部被访问
  private def song(): Unit = {
   println("我在唱歌")
  }

  def sayHi(): Unit = {
   println(s"我是${name},我今年${age}")

   // 私有方法,在类的内部是可以正常调用的
   song()
  }
 }

 def main(args: Array[String]): Unit = {
  val stu3 = new Student("小明",18)
  stu3.sayHi()
  // stu3.song()  会报错
 }
}