scala中的辅助构造器

46 阅读2分钟

主构造函数的参数

参数修饰符的三种情况:var 和 val的区别?

1. var 是可以修改的属性

2. val 是不可以修改的属性

3.而没有使用val或者var修饰的,不是属性,不可在外部访问,不可改写。

this关键字链式风格

this在类内部表示当前对象,我们可以利用这个特点实现对象方法的链式调用。

: 如何实现对象.方法1().方法2().方法3()...

: 格式:对象.方法1().方法2().方法3()...

原理:在方法中返回this

格式

def sayHello():this.type= {    
this

}  
def eat():this.type= {    
    this

}  
s = new Student()  
s.sayHello().eat().say()

辅助构造函数

辅助构造器的方法名固定为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) // 调用辅助构造器

示例

// 定义类
// 主构造函数

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  
  }  
}

辅助构造器的作用

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

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

2.简化对象创建:

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

3.调用主构造器:

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

综合代码示例

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

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

  // 辅助构造函数
  // (1)它的名字就是this
  // (2)它内部的第一句代码就必须是调用 主构造函数 this("xx",0)
  def this() = {
    this("七七",0)
    println("辅助构造函数1被调用...")
  }

  def this(name:String) = {
    this(name,0)
    println("辅助构造函数2被调用...")
  }
}

object base47 {
  def main(args: Array[String]): Unit = {
    //创建一个学生对象
    //val stu3 = new Student("小敏",18)
    //调用对象的方法
    //stu1.sayHi()

    //stu1.age = 19
    //调用对象的方法
    //stu3.sayHi()

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