十月二十九日课堂笔记

28 阅读2分钟
// class 类
// val 修饰的属性是可以被修改的
// var 修饰的属性是可以被修改的
class Student(var name:String, val age:Int) {
  def sayHi(): Unit = {
    println(s"你好${name},我今年${age}")
  }
}

object class11 {
  def main(args: Array[String]): Unit = {
    val stu1 = new Student("小花", 18)
    // 调用对象的方法
    stu1.sayHi()

    // 给对象的属性赋值
    stu1.name = "小范"
    // 调用对象的方法
    stu1.sayHi()
  }
}

屏幕截图 2025-10-29 082858.png

// Student() 构造函数(构造器),用来创建对象
// 1. 主构造函数 class Student(...)
// 2. 辅助构造函数:提供更多的方式来创建对象

class Student(var name:String, val age:Int) {
  // 辅助构造函数
  // 特点:1. 名字就是 this 2. 第一句代码就是调用主构造器
  def this() = {
    this("未知的", 18) // 调用主构造函数
    println("辅助构造器调用了...")
  }

  def this(age:Int) = {
    this("未知的", age)
  }

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

object class11 {
  def main(args: Array[String]): Unit = {
    // 隐式转换:会自动调用相应函数
    val stu1 = new Student("小花", 18)
    val stu2 = new Student()
    val stu3 = new Student(20)
    // 调用对象的方法
    stu1.sayHi()
    // 调用对象的方法
    stu2.sayHi()
    stu3.sayHi()
  }
}

3.

object class12 {
  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() // 在类的外部,无法访问私有属性
  }
}

屏幕截图 2025-10-29 093653.png

object class13 {
  // 判断类和对象的关系? 亲子鉴定?
  // 方式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(age.getClass) // int
    println(stu.getClass) // class level02.Class03$Student

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

image.png

object class14 {

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

  // 重写 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)
    val stu2 = new Student("小明", 18)

    println(stu1)
    println(stu2)
  }
}

屏幕截图 2025-10-29 103901.png 6.

object class15 {
  // 目标:判断2个Student对象是否相等的依据是:学号相同 并且 姓名相同
  // 这里的判断条件可以自己来确定

  class Student(val id:String, val name:String, val age:Int) {
    // 改写 equals 方法
    // 在使用 == 做比较时,会自动调用!
    // 如果是true,就相等,否则不相等
    override def equals(ob: Any): Boolean = {
      println(s"比较逻辑调用...${this.id},${this.name}")
      // 在这里写自己的逻辑......
      val other = ob.asInstanceOf[Student]
      this.id == other.id && this.name == other.name
    }
  }

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