private
中文意思是:私人的,私密的
默认情况下,类的属性在可以通过对象.属性名的方式来获取,如果不希望在类的外部被访问,可以用private来修饰。
判断类和对象的关系
当我们拿到一个对象时,如何知道它所属的类呢?
方法1: 对象.getClass()
方法2:对象.isInstanceof
object Class03 { //判断类和对象的关系?亲子鉴定? //方式1:对象.getClass() //方式2:对象.isInstanceof[类] 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
} }
重写toString8
为什么我们在打印类的对象的时候,输出的内容非常不好看?
如果我们希望改进这一点,可以通过重写toString方法来实现。
使用println来输出对象是,他会自动调用toString方法。
在Scala中,要重写一个方法,你需要使用override关键字。对于toString方法,你可以在你的类中定义它,并使用override来指明这是对父类方法的重写。
object Class04 { //目标:改进类的代码,让它在println的时候,输出的信息更友好一点!
// 重写 toString方法 //(1) override 重写,覆盖... //(2) toString 方法,是每个对象都会自带的一个方法,当我们使用println时,它就会自动被调用,返回一个字符串,就是输出的内容 class Student(var name:String, var age:Int) { override def toString: String = s"姓名:{age}" }
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花",18)
val stu2 = new Student("小明",18)
println(stu1)
println(stu2)
} }
定义toString方法
你可以在类的内部直接定义toString方法。这个方法通常不需要任何参数,并且返回一个String类型的结果。
判断两个对象是相等的?
object Class05 { //目标:判断两个Student对象是否相等的依据是:学号相同 并且 姓名相同 // 这里的判断条件可以自己来确定 class Student(val id:String,var name:String, var age:Int) { //改写equals方法 //在使用 == 判断的时候,会自动调用。 // 如果返回true,则相等 //如果返回false,则不相等 override def equals(obj: Any): Boolean = { println("比较是否相等....",s"{this.name},") // 在这里写自己判断逻辑 // 把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("20240010","小花",18)
val stu2 = new Student("20240011","小花",19)
if(stu1==stu2){
println("他们是同一个人")
} else {
println("不是同一个人")
}
} }
链式调用
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) //链式写法 } }