scala中访问控制与方法重写

42 阅读1分钟

1.private

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.hubbies)
    //stu.hobby()    //在类的外部,无法访问私有属性

  }

}

2.判断类和对象的关系

object Class03 {

  //判断类和对象的关系

  //方法一:对象.getClass()       找爹
  //方法二:对象.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)
    println(age.getClass)


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

}

3.重写toString

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

}

4.判断两个对象是否相等

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

      val other = obj.asInstanceOf[Student]

      this.id == other.id && this.name == other.name
    }
  }


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


    //println(stu1 == stu2)
  }
}

5.链式

object Class06 {
  //链式

  //实现要点:把当前方法的返回值设置为当前对象!
  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()
  }
}