scala中的类和对象

31 阅读2分钟

1.创建类和对象

//1.定义类
class Person(){}


class Student(){}


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

  //2.实例化对象
  val p1 = new Person()

  val s1 = new Student()

  println(p1)

  println(s1)
  }

2.定义和访问成员变量

class Person(){}


class Student() {

  var name: String = "小花"
  var age: Int = 18

}

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

  //2.实例化对象
  val p1 = new Person()

  val s1 = new Student()

  //访问成员变量
  println(s1.name)

  //修改成员变量
  s1.name = "小花花"

  println(s1.name)
  }

3.定义和访问成员方法

class Student() {

  //1.类的属性 - 变量
  var name: String = "小花"
  var age: Int = 18


  //2.类的方法 - 函数
  def say(): Unit = {
    println(s"${name},${age}")
  }
}

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

  //实例化对象
  val s1 = new Student()
  s1.say()
}

4.带参数的构造器

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


    println("Student......被调用了....")
    //1.类的属性 - 变量
//    var name:String = "小花"
//    var age:Int = 18

    //2.类的方法 - 函数
    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()
  }

5.构造器的默认值

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

  }

6.检验能否构成三角形和计算面积

  class Triangle(var a: Double = 1.0, var b: Double = 1.0, var c: Double = 1.0) {
    println(s"$a; $b; $c; $c+")

    // 检验是否构成三角形,结果是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 = {
//    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)

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

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

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

7.构造器中参数的类型

/构造器中的参数的类型
  //1.val定义的属性,不能修改
  //2.var定义的属性,可以修改
  //3.没有val,也没有var的,不是对象的属性。不能使用.语法来访问

  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()

  }

8.辅助构造器

// 多种注册用户的方式 --- 辅助构造器
// 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, "13600000000") // 调用主构造器
    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("945651@qq.com", "123456", "小明")

  r1.say()
  r2.say()
}