辅助构造器
package level02
class Student(val name:String,val age:Int) {
def this() = {
this("未知的",18)
println("辅助构造器被调用了...")
}
def this(age:Int) = {
this("未知的",age)
}
def sayHi(): Unit = {
println(s"我是${name},我今年${age}")
}
}
object class01 {
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花",18)
val stu2 = new Student()
val stu3 = new Student(20)
stu1.sayHi()
stu2.sayHi()
stu3.sayHi()
}
}
辅助构造器被调用了...
我是小花,我今年18
我是未知的,我今年18
我是未知的,我今年20
hobbies用法与private
package level02
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(args: Array[String]): Unit = {
val stu = new Student("小花",18)
stu.sayHi()
// println(stu.hobbies)
// stu.hobby()
}
}
判断类和对象的关系? 亲子鉴定?
package level02
object class03 {
// 判断类和对象的关系? 亲子鉴定?
// 方式1: 对象.getClass() // 找爹
// 方式2: 对象.isInstanceof[类] // DNA对比
class Student(){}
class Teacher(){}
def main(args: Array[String]): Unit = {
val age :Int = 1
val stu = new Student()
// stu 是对象名
// Student 是类名
// stu是Student类的实例。
// stu.getClass
// 返回类名
println(stu.getClass)
println(age.getClass)
// 注意: [],结果是boolean值
println(stu.isInstanceOf[Student])// true
println(stu.isInstanceOf[Teacher])// False
}
}
运行结果:
class level02.class03$Student
int
true
false
目标: 改进类的代码,让它在println的时候,输出的信息更友好一点!
重写 toString方法 (1)override 重写,覆盖..... (2)toString方法,是每个对象都会自带的一个方法,当我们使用println时,它就会自动被调用,返回一个字符串,就是输出的内容。
package level02
object class04 {
//目标: 改进类的代码,让它在println的时侯,输出的信息更友好一点!
// 重写 toString方法
// (1)override 重写,覆盖.....
// (2)toString方法,是每个对象都会自带的一个方法,当我们使用println是,它就会自动被调用,返回一个字符串,就是输出的内容。
class Student(var name:String,var age:Int) {
override def toString:String = s"姓名:${name},年龄:${age}"
}
def main(args: Array[String]): Unit = {
val stu1 = new Student("小花",18)
val stu2 = new Student("小明",18)
println(stu1)// 姓名:小花
println(stu2)// 姓名:小明
}
}
目标:判断两个Student对象是相等的依据是:学号相同 并且 姓名相同
// 改写 equals 方法
// 在使用 == 判断的时候,会自动调用。
// 如果返回true ,则相等
// 如果返回是false ,则不相等
object class05 {
// 目标:判断两个Student对象是相等的依据是:学号相同 并且 姓名相同
class Student(val id: String, val name: String, val age: Int) {
// 改写 equals 方法
// 在使用 == 判断的时候,会自动调用。
// 如果返回true ,则相等
// 如果返回是false ,则不相等
override def equals(obj: Any): Boolean = {
println(s"比较是否相等....${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("20240010","小花",19)
if (stu1 == stu2){
println("他们是同一个人")
}else{
println("不是同一个人")
}
}
}
链式
arr1.map(x => 2*x).filter(x=>x>5).foreach(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())
}
}
结果:
sayhi
sayHello