scala中的类和对象

34 阅读2分钟

创建类和对象

object base25 {

  class Person(){}


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

    println(p1)
    println(s1)

  }
}

image.png

object base26 {
  class Student(var name:String="chen",var age:Int =18) {
    def say(): Unit = {
      println(s"${name},${age}")
    }
  }
  def main(args: Array[String]): Unit = {
    val s1=new Student()
    s1.say()
    val s2=new Student("小明",190)
    s2.say()

  }
}

image.png

判断三条边是否能组成一个三角形

object b1 {


  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 = {
    // println("请输入第一条边")
    // val a = scala.io.StdIn.readDouble()
    // println("请输入第二条边")
    // val b = scala.io.StdIn.readDouble()
    // println("请输入第三条边")
    // val c = scala.io.StdIn.readDouble()
    val t1 = new Triangle(3, 4, 7) // 6
    println(t1.getArea())
    val t2 = new Triangle(3, 4, 3) // 6
    println(t2.getArea())
  }
}

image.png

object base27 {
  // 构造器的默认值
  // 必填项:姓名,年龄,
  // 有默认值的项
  //   性别:男
  //   民族:汉
  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()
  }
}

image.png

object base28 {
    // 构造器中的参数的类型
    // 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()
    }
}

image.png

object b2 {
  // 多种注册用户的方式 --- 辅助构造器
  // 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", "xxx@qq.com", pwd, phone) // 调用主构造器
      println("辅助构造器被调用")
    }
    def this(email: String, pwd: String, name: String) {
      this(name, email, pwd, "1360000000") // 调用主构造器
      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("9456619@qq.com", "123456", "小明")
    r1.say()
    r2.say()
  }
}

image.png