scala 中的类和对象

25 阅读2分钟

创建类和对象

object Base31 {
  class Person(){}

  class Student(){}

  def main(args: Array[String]): Unit = {

    val p1 = new Person()

    val s1 = new Student()

    println(p1)
    println(s1)


}
}

主构造函数

object Base33 {
  class Student(var name:String = "小花", var age:Int = 18) {
    println("Student......被调用了....")
    def say(): Unit = {
      println(s"${name},${age}")
    }
  }

  def main(args: Array[String]): Unit = {
    val s1 = new Student()

     s1.say()

     val s2 = new Student("小明",19)
     s2.say()

}
}

判断是否为三角形

object Base34 {
  // 封装一个三角形类
  // 给中学生使用,根据三条边。
  // 1. 求三角形的面积
  // 2. 判断是否是一个三角形
  class Triangle(var a: Double = 1.0, var b: Double = 1.0, var c: Double = 1.0) {
    println(s"$a; $b; $c;")

    // 检查是否构成三角形,结果是Boolean
    def check(): Boolean = {
      // 构成三角形的条件是:任意两边之和 > 第三边
      return a + b > c && b + c > a && a + c > b
    }
  }

  def main(args: Array[String]): Unit = {
    print("请输入第一条边")
    val a = scala.io.StdIn.readDouble()
    print("请输入第二条边")
    val b = scala.io.StdIn.readDouble()
    print("请输入第三条边")
    val c = scala.io.StdIn.readDouble()

    val t1 = new Triangle(a, b, c)

    if (t1.check()) {
      println("能构成三角形")
    } else {
      println("不能构成三角形")
    }
  }
}

求三角形的面积

object Base35 {
  class Triangle(var a: Double = 1.0, var b: Double = 1.0, var c: Double = 1.0) {
    // 检查是否构成三角形,结果是Boolean
    def check(): Boolean = {
      // 构成三角形的条件是:任意两边之和 > 第三边
      return a + b > c && b + c > a && a + c > b
    }

    // 计算面积:根据三角形的三边计算面积?
    def getArea(): Double = {
      if (check()) {
        var s = (a + b + c) / 2
        s = Math.sqrt(s * (s - a) * (s - b) * (s - c))
        return s
      } else {
        println(s"$a; $b; $c: 不能构成一个三角形")
        return -1
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val t1 = new Triangle(3, 4, 5) // 6
    println(t1.getArea())

    val t2 = new Triangle(3, 4, 3) // 6
    println(t2.getArea())

  }
}

构造器的默认值

object Base36 {
  // 构造器的默认值
  // 必须项:姓名,年龄,
  // 有默认值的项
  // 性别:男
  // 民族:汉
  class Student(var name: String, var age: Int, var gender: String = "男", var nav: String = "汉族") {
    def say(): Unit = {
      println(s"${name}, ${age}, ${gender}, ${nav}")
    }
  }

  def main(args: Array[String]): Unit = {
    // var s0 = new Student() // gender 和 nav 使用默认值
    var s1 = new Student("小明", 19) // gender 和 nav 使用默认值
    s1.say()

    var s2 = new Student("小花", 18, "女", "回族")
    s2.say()
  }
}

构造器中的参数的类型

  1. val 定义的属性,不能修改
  2. var 定义的属性,可以修改
  3. 没有 val,也没有 var 的,不是对象的属性。不能使用 . 语法来访问。
object Base37 {
  // 构造器中的参数的类型
  // 1. val 定义的属性,不能修改
  // 2. var 定义的属性,可以修改
  // 3. 没有 val,也没有 var 的,不是对象的属性。不能使用 . 语法来访问。
  class Student(val name: String, var age: Int, gender: String = "男") {
    def say(): Unit = {
      println(s"$name, $age, $gender")
    }
  }

  def main(args: Array[String]): Unit = {
    var s1 = new Student("小明", 19) // gender 和 nav 使用默认值
    s1.age = 20
    s1.say()
  }
}

多种注册用户的方式 --- 辅助构造器

object Base38 {
  // 多种注册用户的方式 --- 辅助构造器
  // 1. 手机号 + 密码
  // 2. 邮箱 + 密码 + 用户名
  // 姓名
  class Register(val name: String, var email: String, var pwd: String, var phone: String) {
    println("主构造器被调用")
    // 辅助构造器
    // 1. 名称一定是 this
    // 2. 在辅助构造器内部,一定要调用主构造器 this
    // 3. 可以有多个
    def this(phone: String, pwd: String) {
      this("随机用户xxxxx", "xxxx@qq.com", pwd, phone) // 调用主构造器
      println("辅助构造器被调用")
    }
    def this(email: String, pwd: String, name: String) {
      this(name, email, pwd, "1300000000") // 调用主构造器
      println("辅助构造器被调用")
    }
    def say(): Unit = {
      println(s"姓名: ${name}, 邮箱: ${email}, 密码: ${pwd}, 手机: ${phone}")
    }
  }
  def main(args: Array[String]): Unit = {
    // val r1 = new Register("小明", "123123@qq.com", "123456", "13617885566")
    // 调用辅助构造器
    val r1 = new Register("13617885566", "123456")
    val r2 = new Register("9456651@qq.com", "123456", "小明")
    r1.say()
    r2.say()
  }
}