private

43 阅读1分钟
package level02

object Class02 {
  class Student(val name: String, val age: Int) {

    // private: 私有的,不对外公布,不对外发布,在外面不可以访问。在家之外的地方,不可以被别人知道....
    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 stu = new Student("小花", 18)
    stu.sayHi()
    // println(stu.hobbies)
    // stu.hobby() // 在类的外部,无法访问私有属性
  }
}

private: 私有的,不对外公布,不对外发布,在外面不可以访问。在家之外的地方,不可以被别人知道....

package level02

object Class03 {
 // 判断类和对象的关系?亲子鉴定?
 // 方式1:对象.getClass()    // 找爹
 // 方式2:对象.isInstanceOf[类]  // DNA对比
 class Student() {}
 class Teacher() {}

 def main(args: Array[String]): Unit = {
  val age: Int = 1

  val stu = new Student()
  // stu 是对象名
  // Student是类名
  // stu是Student类的实例。

  // 返回类名
  println(stu.getClass) // class level02.Class03$Student
  println(age.getClass) // int

  // 注意:[], 结果是boolean值
  println(stu.isInstanceOf[Student]) // true

  println(stu.isInstanceOf[Teacher]) // false
 }
}

// 目标: 改进类的代码,让它在println的时候,输出的信息更友好一点!

重写 toString方法

(1) override 重写,覆盖....

(2) toString 方法,是每个对象都会自带的一个方法,当我们使用println时,它就会自动被调用,返回一个字符串,就是输出的内容。

package level02

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对象是否相等的依据是:学号相同 并且 姓名相同

这里的判断条件可以自己来确定

package level02

object Class05 {
  
  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
  }
}
package level02

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