(一)、private
默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰。
object class02 {
//private:私人的,私有的
//private 修饰之后,它就是私有的,在类的外部无法被访问,只能在类的内部被访问
class Student(var name:String,var age:Int) {
//私有属性
private val phoneNum:String="136xxxxxx"
//私有方法
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()
}
(二)、重写toString
使用println来输出对象时,他会自动调用toString方法。 在Scala中,要重写一个方法,你需要使用override关键字。对于toString方法,你可以在你的类中定义它,并使用override来指明这是对父类方法的重写。
object class03 {
//目标:让对象被打印的时候,输出信息更友好一些
//做法:重写 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("小花",18)
val stu2=new Student("小明",19)
//打印输出一个对象,输出的信息不友好。
//su2.class03$Student@2133c8f8
//su2.class03$Student@43a25848
println(stu1)
println(stu2)
}
(三)、判断两个对象是相等的?
两个对象做比较==时,会自动调用equals方法。我们可以重写equals方法,并自己定义两个对象相等的标准。
object class04 {
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",18)
val stu2=new Student("小花","20230012",18)
val stu3=new Student("小花","20230013",18)
//目标,判断他们是一个人。使用 == 来输出的时候,应该要是true
println(stu1 == stu2)//true
println(stu1 == stu3)//false
}