一、private
private: 私有的 私人的
privata: 修饰之后 他就是私有的 在类的外部无法被访问 只能在类的内部被访问
class Student(var name:String, var age:Int) {
// 私有属性
private val phoneNum:String = "134XXXXXXX"
// 私有方法
private def hobby(): Unit = {
println("我的个人爱好是隐私设置")
}
def sayHello(): Unit = {
println(s"我是${name},今年${age}")
hobby() // 在类的内部 可以访问私有成员
}
}
def main(args: Array[String]): Unit = {
// 实例化类的对象 stu
// new 的时候 就会自动调用一次构造函数
val stu = new Student("栩子",18)
stu.sayHello()
//stu.hobby() 报错
}
二、重写 toString方法
目标:让对象被打印的时候 输出信息更友好一些
做法:重写 toString方法
在使用println输出一个对象的时候 他会自动调用toString方法 并输出这个方法的返回值!
class Student(var name:String, var age:Int) {
override def toString: String = s"Student(${name}, ${age})"
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花",20)
val stu2 = new Student("小明",20)
//打印输出一个对象 输出的信息不友好
// level02.class01$Student@4c203ea1
// level02.class01$Student@27f674d
println(stu1)
println(stu2)
}
三、equals
两个对象做比较==时,会自动调用equals方法。
我们可以重写equals方法,并自己定义两个对象相等的标准。
案例:判断this 和 obj 是否相等的逻辑:姓名和学号都相等,说明这两个学生是同一人
class Student(var name:String,var id:String, var age:Int) {
// equals 相等
override def equals(obj: Any): Boolean = {
println("调用了equals...")
println(this, obj)
// 判断this 和 obj 是否相等的逻辑:姓名和学号都相等,说明这两个学生是同一人
val other = obj.asInstanceOf[Student]
this.name == other.name && this.id == other.id
}
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花","20230012",20)
val stu2 = new Student("小花","20230012",20)
val stu3 = new Student("小花","20230013",20)
// 目标 判读他们是一个人 使用 == 来输出的时候 应该要是true
println(stu1 == stu2) //true
println(stu1 == stu3) // false
}