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