scala

24 阅读1分钟

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"姓名:name,年龄:{name},年龄:{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.id,{this.id},{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) //链式写法 } }