# 理解构造器

33 阅读2分钟

理解构造器

2025-09-2916阅读2分钟

一、解读构造器

构造器是一个函数,在new的时候,被自动调用,它的作用是实例化对象。

new Class() 就是在调用构造器,或者叫调用构造函数。

二、案例

求三角形的面积

object test30 {

  class Triangle(a: Double, b: Double, c: Double) {

    def getArea(): Double= {
      if (check()) {
        var s = (a + b + c) / 2
        s = s * (s - a) * (s - b) * (s - c)
        return Math.sqrt(s) //Math.sqrt(4) →2 就是开平方操作
      }else{
        print("不能构成三角形")
        return 0;
      }
    }
    //检查是否能构成三角形
    def check():Boolean={
      //任意两边之和大于第三遍
      return (a+b)>c && (a+c)>b &&(b+c)>a

    }

  }

  def main(args: Array[String]): Unit = {
    //Triangle表示一个三角形类。
    //Triangle(边长1,边长2,边长3)

    val t1=new Triangle(3,4,5)
    println(t1.getArea())

    val t2=new Triangle(1,1,4)
    println(t2.getArea())
  }

}

image.png

构造器的用法

object test31 {
  //可以在两个地方写属性
  //1.构造器的参数列表
  //2.构造器内部

  //构造器的参数列表:
  //1.val 表示不可以被修改的属性
  //2.var 表示可以被修改的属性
  //3.没有修饰,不是对象的属性,无法访问

  class Triangle(val a:Double,var b:Double,var 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
  }

}

主、辅构造器

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

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","小花","12456")
    u2.say()
    var u3=new User("12345@qq.com","小花","12456","13617891234")
    u3.say()



    //辅构造器

  }

}