类和对象

37 阅读1分钟

创建类和对象

1. 使用IDEA创建一个scala项目,并创建object类。

2. 设置项目名,包名,项目地址。注意不要使用中文,空格,特殊符号作为名字及路径名。

package level2

class Student(var name:String, val age:Int) {
  def sayHi(): Unit = {
    println(s"我是${name}, 我今年${age}")
  }
}

object Sc61 {
  def main(args: Array[String]): Unit = {
    val stu1 = new Student("小花", 18)
    stu1.sayHi()
    stu1.name = "小蛙蛙"
    stu1.sayHi()
  }
}

private核心含义是 “私人的”

package level2

object Sc62 {
  class Student(var name:String, val age:Int) {
    private val hobbies:String = "半夜三更去挖坟"
    private def hobby(): Unit = {
      println(s"${hobbies}")
    }
    def sayHi(): Unit = {
      println(s"${name}, ${age}")
      hobby()
    }
  }
  def main(args: Array[String]): Unit = {
    val stu1 = new Student("小哥", 18)
    stu1.sayHi()

  }
}

判断类和对关系

方法1: 对象.getClass()

方法2:对象.isInstanceof[类]

package level2

object Sc63 {
  class Student() {}
  class Teacher() {}
  def main(args: Array[String]): Unit = {
    val age:Int = 1
    val stu = new Student()
    println(stu.getClass)
    println(age.getClass)
    println(stu.isInstanceOf[Student])
    println(stu.isInstanceOf[Teacher])
  }
}

重写toString

  1. 在Scala中,要重写一个方法,你需要使用override关键字。对于toString方法,你可以在你的类中定义它,并使用override来指明这是对父类方法的重写。

  2. 定义toString方法 你可以在类的内部直接定义toString方法。这个方法通常不需要任何参数,并且返回一个String类型的结果

package level2

object Sc64 {
  class Student(var name:String, var age:Int) {
    override def toString: String = s"姓名: ${name}"

  }

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

    val stu1 = new Student("小哥", 19)
    val stu2 = new Student("小老弟", 18)

    println(stu1)
    println(stu2)
  }
}

判断两个对象是相等的

两个对象做比较==时,会自动调用equals方法。我们可以重写equals方法,并自己定义两个对象相等的标准

package level2

object Sc65 {
  class Student(val id:String,val name:String, val age:Int) {
    override def equals(obj: Any): Boolean = {
      println(s"比较是否相等...${this.id},${this.name},")
      val other = obj.asInstanceOf[Student]
      this.id == other.id && this.name == other.name
    }
  }

  def main(args: Array[String]): Unit = {
    val stu1 = new Student("20241001","小哥", 18)
    val stu2 = new Student("20041001","小哥", 19)
    if(stu1 == stu2){
      println("他们是同一个人")
    } else {
      println("不是同一个人")
    }
  }
}

链式结构

package level2
object Sc66 {
// 链式
  // arr1.map(x => 2*x).filter(x=>x>5).foreach(println)

  // 实现要点: 把当前方法的返回值设置为当前对象!
  class Student {
    def sayHi(): Student = {
      println("sayHi")
      this
    }

    def sayHello(): Student = {
      println("sayHello")
      this // 返回当前对象
    }
  }

  def main(args: Array[String]): Unit = {
    val stu1 = new Student()
    // 链式调用: 方法.方法.方法....
    stu1.sayHi().sayHello()
  }

  // val arr1 = Array(1,2,3)
  // arr1.map(x => 2*x).filter(x=>x>5).foreach(println)
}