Scala | private && toString(重写) && equals

51 阅读2分钟

一、private

private: 私有的 私人的

privata: 修饰之后 他就是私有的 在类的外部无法被访问 只能在类的内部被访问

class Student(var name:String, var age:Int) {

  // 私有属性
  private val phoneNum:String = "134XXXXXXX"

  // 私有方法
  private def hobby(): Unit = {
    println("我的个人爱好是隐私设置")
  }

  def sayHello(): Unit = {
    println(s"我是${name},今年${age}")

    hobby()  // 在类的内部 可以访问私有成员
  }
}

def main(args: Array[String]): Unit = {
  // 实例化类的对象 stu
  // new 的时候 就会自动调用一次构造函数
  val stu = new Student("栩子",18)
  stu.sayHello()
  //stu.hobby() 报错
}

二、重写 toString方法

目标:让对象被打印的时候 输出信息更友好一些
做法:重写 toString方法
在使用println输出一个对象的时候 他会自动调用toString方法 并输出这个方法的返回值!
class Student(var name:String, var age:Int) {

  override def toString: String = s"Student(${name}, ${age})"

}

def main(args: Array[String]): Unit = {
  val stu1 = new Student("小花",20)
  val stu2 = new Student("小明",20)
  //打印输出一个对象 输出的信息不友好
  // level02.class01$Student@4c203ea1
  // level02.class01$Student@27f674d
  println(stu1)
  println(stu2)
}

三、equals

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

案例:判断this 和 obj 是否相等的逻辑:姓名和学号都相等,说明这两个学生是同一人

class Student(var name:String,var id:String, var age:Int) {
  // equals 相等
  override def equals(obj: Any): Boolean = {
    println("调用了equals...")

    println(this, obj)
    // 判断this 和 obj 是否相等的逻辑:姓名和学号都相等,说明这两个学生是同一人
    val other = obj.asInstanceOf[Student]
    this.name == other.name && this.id == other.id

  }

}

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

  val stu1 = new Student("小花","20230012",20)
  val stu2 = new Student("小花","20230012",20)
  val stu3 = new Student("小花","20230013",20)
  // 目标 判读他们是一个人 使用 == 来输出的时候  应该要是true
  println(stu1 == stu2)  //true
  println(stu1 == stu3)  // false
}