Scala访问控制与方法重写

39 阅读1分钟

重写 toString方法

    1. override 重写,覆盖....
    1. toString 方法,是每个对象都会自带的一个方法,当我们使用println是,他就会自动被调用,返回一个字符串,就是输入的内容
object Class04 {
 class Student(var name:String,var age:Int) {
   override def toString: String = s"姓名: ${name}"

 }

 def main(args: Array[String]): Unit = {
   val stu1 = new Student("小花",18)
   val stu2 = new Student("小明",18)
   println(stu1)
   println(stu2)
 }

}

目标:判断两个Student对象是否相等的依据是:学号相同 并且 姓名相同 这里的判断条件可以自己来确定

object Class05 {
  // 目标:判断两个Student对象是否相等的依据是:学号相同 并且 姓名相同
  //      这里的判断条件可以自己来确定
  class Student(val id: String, val name: String, val age: Int) {
    // 改写 equals 方法
    // 在使用 == 判断的时候,会自动调用。
    // 如果返回true,则相等
    // 如果返回false,则不相等
    override def equals(obj: Any): Boolean = {
      println(s"比较是否相等... ${this.id},${this.name},")
      // 在这里写自己判断逻辑
      // 把obj当做Student
      val other = obj.asInstanceOf[Student]
      this.id == other.id && this.name == other.name
    }
  }

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

    // println(stu1 == stu2) // false
  }
}
object Class06 {
  // 链式
  // 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)
  }
}