一.回顾class类
class Student(var name:String, val age:Int) {
def sayHi(): Unit = {
println(s"我是${name},我今年${age}")
}
}
object class01 {
def main(args:Array[String]): Unit= {
val stu1 = new Student("小花",18)
stu1.sayHi()
stu1.name = "小花花"
stu1.sayHi()
}
二.辅助构造器
- Student(),构造函数(构造器),用来创建对象
- 主构造函数class Student()
- 辅助构造函数,提供更多的方式来创建对象
- 辅助构造函数的特点:名字就是this,第一句代码就是调用主构造器
class Student(var name:String, val age:Int) {
println("Student.....")
def this() = {
this("未知的",18)
println("辅助构造器被调用了.....")
}
def this(age:Int) = {
this("未知的",age)
}
三.私有函数
- private:私有的,不对外公布的,在外面不可以访问的
- hobby()//在类的内部,可以调用私有方法
- 在外部,无法访问私有属性
object class02 {
class Student(val 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(array: Array[String]): Unit = {
val stu = new Student("小花",18)
stu.sayHi()
}
}
例1.判断类和对象的关系
- 方式1. 对象.getClass()---找爹
- 方式2. anceof[类]---DNA对比
object class03 {
class Student() {}
class Teacher() {}
def main(arges: Array[String]): Unit = {
val age:Int = 1
val stu = new Student()
println(stu.getClass)
println(age.getClass)
println(stu.isInstanceOf[Student])------对
println(stu.isInstanceOf[Teacher])-----错
}
}
四.重写toString方法
- 目标:改进类的代码,让它在println的时候,输出的信息更友好一点
- 方法:(1)override重写,覆盖....
- 方法:(2)toString方法,是每个对象都会自带的一个方法,当我们使用println时,它就会自动被调用,返回一个字符串,就是输出的内容。
class Student(var name:String,var age:Int) {
override def toString: String = s"姓名:${name}"------要返回的字符串
}
def main(arges: Array[String]): Unit = {
val stu1 = new Student("小花",18)
val stu2 = new Student("小明",15)
println(stu1)
println(stu2)
}
例2.判断两个对象是否相同
一.改写equals方法
- 在使用==判断时,会自动调用
- 如果返回true,则相等
- 如果返回是false,则不相等
class Student(val id:String,val name:String,val age:Int) {
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(arges: Array[String]): Unit = {
val stu1 = new Student("20240001","小花", 18)
val stu2 = new Student("20240001","小明", 15)
if (stu1 == stu2){
println("他们是同一人")
} else{
println("不是同一人")
}
}
五.链式
- 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(arges: Array[String]): Unit = {
val stu1 = new Student()
stu1.sayHi().sayHello()
}
}