🎈复习:
- ①.class 类
- ②.var 修饰的属性是可以被修改的;val 修饰的属性是只读的,不可以被修改
- ③.student()构造函数(构造器),用来创建对象
- ④.主构造器class student()
- ⑤.辅助构造器提供更多方式来创建对象
- ⑥.辅助构造器特点:1.名字就是this 2.第一句代码就是调用主构造器)
package level02
class Student(var name:String,val age:Int) {
println("Student....")
def this()={
this("未知的",18)
println("辅助构造器被调用了...")
}
def this(age:Int)={
this("未知的",18)
}
def sayHi():Unit = {
println(s"我是${name},我今年${age}")
}
}
object class01 {
def main(args:Array[String]):Unit ={
//创建对象
val stu1 =new Student("小花",18)
val stu2=new Student()
val stu3 =new Student(20)
//调用对象的方法
stu1.sayHi()
//调用对象的方法
stu1.sayHi()
stu2.sayHi()
stu3.sayHi()
}
}
🎈private
默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰。
package level02
object Class02 {
class Student(var name:String,val age:Int) {
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()//在类的外部,无法访问私有属性
}
}
🎈判断类和对象的关系
通过getInstanceof 和 getClass方法来获取对象的Class名。判断他们之间的关系
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
}
}
🎈重写toString
- ①.目标:改进类的代码,让他在printl的时候,输出的信息好看一些
- ②.重写 toString方法: (1)override重写,覆盖.... (2)toString方法,是每个对象都自带的一个方法,当我们使用println时,他就会自动被调用,返回一个字符串,就是输出的内容
package level02
object Class04 {
class Student(var name:String,var age:Int) {
override def toString: String = s"姓名:${name},年龄:${age}"
}
def main(args: Array[String]): Unit = {
val stu1=new Student("小花",18)
println(stu1)
}
}
🎈判断两个对象是相等的?
- ①.目标:判断两个Student对象是否是相同的学生:学号相同 并且 姓名相同( 这里的判断条件可以自己来确定)
- ②.重写equals方法:在使用 == 判断时,会自动调用;如果返回true,则相等;如果返回false,则不等
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} vs ...")
// 在这里写自己的逻辑
//把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("22010601", "小花", 18)
val stu2 = new Student("22010601", "小花", 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)
}
}