构造函数(函数的调用)

39 阅读3分钟

带参数的构造器(构造函数)

//带参数的构造器(构造函数)
class Student(var name: String = "小花", var age: Int = 18) {
  //方法
  //定义方法和定义函数一致
  def sayHello() = {
    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)

函数的调用

计算三角形边长的面积,且进行调用

//面向对象编程的三个特点
//封装,继承,多态
class Triangle(a:Double,b:Double,c:Double) {

  //计算面积
  def getAera():Double={
    //能否根据三条边长,来计算面积?
     var s =(a+b+c)/2
    s = s*(s-a)*(s-b)*(s-c)
    return Math.sqrt(s)
  }
}


def main(args: Array[String]): Unit = {
  //Triangle表示一个三角形类。
  //Triang(边长1,边长2,边长3)
  val t1 = new Triangle(3,4,5)
  println(t1.getAera())//获取面积,输出结果为6.0

  val t2 = new Triangle(4,4,4)//调用
  println(t2.getAera())//获取面积,输出结果为6.928203230275509
}

注:若用户给出的数字不足以构成三边 eg:

val t3 = new Triangle(1,1,0)//调用
println(t3.getAera())//获取面积

新增t3,将边长改为1,1,0输出结果为0.0

解决方法:

在函数里新增if,若输出的数不足以构成三角形输出“不能构成三角形“完整函数如下

//面向对象编程的三个特点
  //封装,继承,多态
  class Triangle(a:Double,b:Double,c:Double) {

    //计算面积
    def getAera():Double={
      if(check()){
      //能否根据三条边长,来计算面积?
       var s =(a+b+c)/2
      s = s*(s-a)*(s-b)*(s-c)
      return Math.sqrt(s)   //Math.sqrt(4) ==> 就是开平方操作
    }else{
      print("不能构成三角形")
      return 0;
    }
  }
  //坚持是否能构成三角形
  def check():Boolean = {
    //任意两边之和大于第三边
    return (a+b)>c && (a+b)>b && (b+c) >a
  }
  }


  def main(args: Array[String]): Unit = {
    //Triangle表示一个三角形类。
    //Triang(边长1,边长2,边长3)
    val t1 = new Triangle(3,4,5)
    println(t1.getAera())//获取面积

    val t2 = new Triangle(4,4,4)//调用
    println(t2.getAera())//获取面积

    val t3 = new Triangle(1,1,0)//调用
    println(t3.getAera())//获取面积
  }
}

构造器

可以在两个地方写属性:

1.构造器的参数列表

2.构造器的内部

构造器的参数列表:

1.val 表示不可以被修改的属性

2.var 表示可以被修改的属性

3.没有修饰符,不是对象的属性,无法访问

eg:

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

  //构造器的参数列表:
  //1.val 表示不可以被修改的属性
  //2.var 表示可以被修改的属性
  //3.没有修饰符,不是对象的属性,无法访问
  class Triangle(var 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 无法访问
  }

}

eg:

写一个构造器

主构造器:一个,就是class

辅构造器:多个,名称就是this

构造器的作用:产生对象

支持多种创建对象的方式 ==== 在网站在注册用户的时候,可以有多种注册的方式:手机号,微信号,邮箱号

/** *
   * 写一个构造器
   * 主构造器:一个,就是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 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("12345678901", "123456")
    u1.say()

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

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