scala 构造器

89 阅读3分钟

1.主构造器

2.1 定义:在 Scala 中,主构造器是类定义的一部分,它与类的声明紧密结合,用于初始化类的实例。主构造器的参数直接定义在类名后面,并且可以直接在类体中使用。

2.2 主构造器的特点:

(1) 参数作用域:主构造器的参数可以在整个类体中使用

(2) 访问修饰符:可以为参数添加 val 或 var 关键字,使其成为类的字段

  • val:不可变字段(只读)

  • var:可变字段(可读可写)

  • 不加修饰符:只能在类内部使用,不会成为类的字段

例子:

object basic25 {
  // 带参数的构造器(构造函数)
  class Student(var name:String ="小花",var age:Int=18){
//    方法
//    定义方法和定义函数一致
    def sayHello(): Unit ={
      println(s"我是${age} 岁的${name}")
    }
  }
  def main(args: Array[String]): Unit = {
//  new Student()
//    1. 调用构造器,第五行 。
//  2. 没有传入相关参数,使用默认值。

    val st1=new Student()
    println(st1.name)
//new Student("小明",19)
//1. 调用构造器,第五行 。
    //  2. 没有传入相关参数。
   val st2=new Student("小明",19)
    println(st2.name)
  }

}

辅构造器

1. 定义:在 Scala 中,除了主构造器之外,还可以定义辅助构造器(Auxiliary Constructor),用于提供类的多种实例化方式。辅助构造器通过 this 关键字定义,并且必须直接或间接调用主构造器。

2.下面是一个包含主构造器和多个辅构造器的类示例:

// 构造器的参数修饰符
object basic26 {
//  可以在两个地方写属性
//  1.构造器的参数列表
//  2.构造器内部
//
//
//  构造器的参数列表
//  1. val  表示不可以被修改的参数
//  2.  var  表示可以被修改的参数
//  3.  没有修饰符,不是对象的属性,无法访问。
 class Triangle(val a:Double,var b:Double,c:Double) {
  val d:Int=1
  var e:Int=2
}
  def main(args: Array[String]): Unit = {
    val t=new Triangle(1,2,3)
    t.b=2

    // t.c无法访问


  }
}
object basic27 {
  /**
   * 写个构造器
   * 主构造器: 一个,就是class
   * 辅构造器: 多个, 名称就是this
   * 构造器的作用:   生产对象
   * 支持多种创建对象的方式  ===  在网站在注册用户时,  可以有多种注册方法: 手机号, 微信号, 邮箱号
   *
   * @param args
   */

    class User(val phone:String,var pwd:String) {
    var email:String =""
    var name:String =""


    def this (email:String,name:String,pwd:String){
      // 调用一次主构造器
      this("",pwd)
      // 再对其他属性赋值
      this.name = name
      this.email = email
    }
    // 辅构造器
    def this (email:String,name:String,pwd:String,phone:String){
      // 调用一次主构造器
      this(phone,pwd)
      // 再对其他属性赋值
      this.name = name
      this.email = email
    }
    def say():Unit={
      println(s"我的信息如下:")
      println(s"姓名:${name} ")
      println(s"手机号:${phone}")
      println(s"邮箱:${email}")
      println(s"密码:${pwd}")

    }
  }
  def main(args: Array[String]): Unit = {
   var u1=new User("13617891234","123456")
   u1.say()

    var u2=new User("12345@qq.com","小花","123456")
    u2.say()

    var u3=new User("12345@qq.com","小花","123456","13617891234")
    u3.say()

  }
}

4.辅构造器的特点

1.1 必须调用其他构造器:每个辅构造器的第一条语句必须是 this(...),用于调用主构造器或其他已定义的辅构造器。

1.2 参数列表不同:辅构造器的参数列表必须与主构造器及其他辅构造器不同(参数数量或类型不同),以实现重载。

1.3 不能直接定义字段:辅构造器不能像主构造器那样直接在参数列表中定义字段(如 val 或 var),字段需要在类中显式定义。