scala中的类和对象

42 阅读2分钟

一.创建类和对象

object iphone5pro {
  //Person就是一个类名,理解为变量名
  //首字符是大写的
  //类名一般为名词
  class Person(){ }
  class Student(){}

  def main(args: Array[String]): Unit = {
    println("Hello world!")
    // 创建对象
    val p1 = new Person()
    val p2 = new Person()
    println(p1)
    println(p2)
  }
}

二.定义变量

object iphone5pro {
  //Person就是一个类名,理解为变量名
  //首字符是大写的
  //类名一般为名词
  class Person(){ }
  class Student() {
    var name:String = "小花"
    var age:Int = 18
  }

  def main(args: Array[String]): Unit = {
    // 创建对象
    val p1 = new Person()
    val s1 = new Student()
    println(s1.name)
    s1.name = "小花花"
    println(s1)
    println(s1.name)
  }
}
object iphone5promax {

  class Student() {
    var name: String = "小花"
    var age: Int = 18

    def say(): Unit = {
      println(s"${name},${age}")
    }

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

    val s1 = new Student()
    s1.say()
  }
}
object iphone5plus {

  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 iphone6 {
  class Triangle(var a:Double = 1.0,var b:Double = 1.0,var c:Double = 1.0) {
    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 = {
//    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)
    var t1 = new Triangle(3,4,2)
    println(t1.getArea())
    var t2 = new Triangle(3,4,3)
    println(t2.getArea())
  }
}

三.构造器的默认值

object iphone6pro {
  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 s1 =new Student("小明",19)
    s1.say()
    var s2 =new Student("小花",18,"女","回族")
    s2.say()
  }
}

四.构造器中的参数的类型

object iphone6promax {
  class Student(var name:String,var age :Int,var gender:String="男") {
    def say():Unit ={
      println(s"${name},${age},${gender}")
    }
  }

  def main(args: Array[String]): Unit = {
    var s1 =new Student("小明",19)
    s1.age = 20
    s1.say()
  }
}

五.辅助构造器

object iphone6promax {
  // 多种注册用户的方式 --- 辅助构造器
  // 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", "xxxxx@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("9456651@qq.com", "123456", "小明")

    r1.say()
    r2.say()
  }
}