scala的private关键字和重写toString方法

43 阅读2分钟

private关键字

默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰。

private:私人的,私有的

格式如下:

10.29.jpeg

private 修饰之后,它就是私有的,在类的外部无法被访问。只能在类的内部被访问

class class02 {

  class Student(var name:String,var age:Int) {
  
    // 私有属性
    private val phoneNum:String = "136xxxxx"

    // 私有方法
    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.hobby() 会报错!
  }
}

重写toString方法

打印输出一个对象,输出的信息不友好。如果我们希望改进这一点,可以通过重写toString方法来实现。

使用println来输出对象时,他会自动调用toString方法。

1.定义toString方法

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

做法:在使用println输出一个对象的时候,它会自动调用toString方法并输出这个方法的返回值

object class03 {
  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("小花",18)
    val stu2 = new Student("小明",20)
    println(stu1)
    println(stu2)
  }
}

判断两个对象是相等的

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

equals 相等

object class04 {
  class Student(var name:String,var id:String,var age:Int) {
  
    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("小花","20251103",18)
    val stu2 = new Student("小花","20251103",18)
    val stu3 = new Student("小花","20251102",18)
    
  // 目标:判断他们是同一个人,使用 == 来输出时,得到true
    println(stu1 == stu2) // true
    println(stu1 == stu3) // false
  }
}