scala中的类和对象

45 阅读1分钟
package level02
class Student(val name:String,val age:Int) {
  //private:私有的。不对外公布,不对外发布,在外面不可以访问。在家之外的地方,不可以被别人知道..
  val hobies:String = "躲在被子,打开手机看恐怖小说"
  private def hoby():Unit = {
    println(s"${hobies}")
  }
  def sayHi():Unit = {
    println(s"${name},${age}")
    hoby()//在类的内部,可以调用私有方法
  }
}
object Class02 {
  def main(args: Array[String]): Unit = {
    val stu = new Student("小花",18)
    stu.sayHi()
    //println(stu.hobbies)
    //stu.hoby()//在类的外部,无法访问私有属性
  }
}
object Class03 {
  //判断类和对象的关系?亲子鉴定?
  //方式1:对象.getClass()//找爹
  //方式1:对象.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
  }
}
object class04 {
  //目标:改进类的代码,让它在printaln的时候,输出在信息更友好一点!
  //重写 toString方法
  //(1)override 重写,覆盖...
  //(2)toString方法,是每个对象都会自带的一个方法,当我们使用println时,它就会自哟被调用,返回一个字符串,就是输出内容。
  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)//level02.class04$studdenty@2133c8f8
     val stu2 = new Student("小明",18)//level02.class04$studdenty@2133c8f8
     println(stu1)//姓名:小花
     println(stu2)//姓名:小明
  }
}
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("20240010","小花",18)
    val stu2  = new Student("20240010","小花",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()
  }
}